Notice: The OpenEthereum team and core developers are aware of the syncing issues facing the OE client and are working to diagnose and fix. New block data will not be available on Etherscan until a fix is released.

Contract 0xC5E9dDebb09Cd64DfaCab4011A0D5cEDaf7c9BDb

 
Ad
Ad
Txn Hash Method
Block
From
To
Value
0x69c2018ba41cf7883f12644d6c71f86c6740b75682bf3c2e9afc747f770a27edPending(pending)2021-04-15 14:23:502 mins ago0x623fb5ff84192947e8908ff6b3624c89216eb7a0 IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0 Ether(Pending)(Pending)
0xb8624391c7afec6ce89716724cf88ff98a0735f76e86ccfdae1f5a27db82fa30Pending(pending)2021-04-15 14:20:296 mins ago0xc9ea9636fe0f530ce96c392f56f8a8fca68afd6e IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0 Ether(Pending)(Pending)
0xf4ad62b1601ed7f6149c0201d74933d2de92e36589bdaacca55c48d8b33beec5Pending(pending)2021-04-15 14:18:368 mins ago0x623fb5ff84192947e8908ff6b3624c89216eb7a0 IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0 Ether(Pending)(Pending)
0xa08f28ccf25cc9d2fd12d95906f32669923b1a219a7d71eabfb9fbbd8b7871cfPending(pending)2021-04-15 14:18:368 mins ago0x623fb5ff84192947e8908ff6b3624c89216eb7a0 IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0 Ether(Pending)(Pending)
0x66d50232a1a2c7a54d8449a0a0187ab6719a9b275dc421bdda92e939fc73b551Pending(pending)2021-04-15 14:18:368 mins ago0x623fb5ff84192947e8908ff6b3624c89216eb7a0 IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0 Ether(Pending)(Pending)
0x0b41cfd87a82fb3c570dfdc012c597d29a5b94401e37dc72410b5e6f507c7b75Pending(pending)2021-04-15 14:18:218 mins ago0x44b0196786696c06da582a871f5d90680e05fb6e IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0.157 Ether(Pending)(Pending)
0x290e50df82badef147f2f4381dd710f91fdf3e8b180006a257072ac31a60bf47Pending(pending)2021-04-15 14:07:3919 mins ago0x4115186ff29c880c533fd30824676bed96cbf12b IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0.157 Ether(Pending)(Pending)
0x066f3e114a62888d16f700578c79184f4e20df7a22479eb99b5c00175895c136Pending(pending)2021-04-15 14:05:5220 mins ago0x4fcd76785a8f31a7762689018bec4037243c9eba IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0.157 Ether(Pending)(Pending)
0x950e5e02db9b0c23004929afc2648dc12664395d817bb027f30611af79a4d5c0Pending(pending)2021-04-15 14:00:4526 mins ago0x2d5b5c943d04ec56edca996cc7963ca50eb57ba6 IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0 Ether(Pending)(Pending)
0x45933d06c1be6accc5dd0771ae4c66292716640e6b05ca5e6eb55f1bed458629Pending(pending)2021-04-15 13:59:2727 mins ago0x21667495bbeb73c6af61dab5c09cf008a7f38e33 IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0 Ether(Pending)(Pending)
0xc246bf285d3f2f80e95645afe2de34581deb389cfe018537e9ae43f306b63541Pending(pending)2021-04-15 13:50:1536 mins ago0x9d9e26932d012b2ab21b974fe1552f4025b1e1cc IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0 Ether(Pending)(Pending)
0xaecb8f049021c3d5447de08bb60959b2a77e7b9a96029756d645d30d47c09d53Pending(pending)2021-04-15 13:48:2838 mins ago0x2cb4850066fa90355d08c48232b0a83be0b32f47 IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0.157 Ether(Pending)(Pending)
0xb1f1083826313bb4d17137689744d846eeec5e2051013bc2bb57183c6bd586abPending(pending)2021-04-15 13:48:2838 mins ago0x2cb4850066fa90355d08c48232b0a83be0b32f47 IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0.157 Ether(Pending)(Pending)
0xd82f2dcfa00c17b9bd487566a04729c4756b80b6d4da40a84a93470eb5bd21aaPending(pending)2021-04-15 13:40:3946 mins ago0x662727407579079e73e8472454921ed88b5a0c93 IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0.157 Ether(Pending)(Pending)
0x699edee39e347e42c0972ec7d8dc06608f76b5bdda07cf56127d233ca1311a94Pending(pending)2021-04-15 13:40:2446 mins ago0x7a209f2b078444f3ff91982dc9008e51d2b45826 IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0 Ether(Pending)(Pending)
0x7072eb7242838be6716ea832a8a28c36088186c37005e0cca07cf3aa81f4de08Pending(pending)2021-04-15 13:39:0847 mins ago0x49a3ab5eb163473733371d5d396ca2d1b5159583 IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0.157 Ether(Pending)(Pending)
0x7763fb3f2e9feeb818c0f7388908a0ab4cda27ce05068ce53ddfa83bacd7f64cPending(pending)2021-04-15 13:36:2150 mins ago0xa37c2608ee3c686b6f06dbda33007f8dad4d5cda IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0 Ether(Pending)(Pending)
0x26199bf00952bbf2869b65b03188bdf5179ffaeddd8f93f4feecfcb3196b64a4Pending(pending)2021-04-15 13:08:061 hr 18 mins ago0x1444cd52318bd78964f437ae4364ac74e57a4b7e IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0 Ether(Pending)(Pending)
0x20392f742d2a27e1a8e08d63f9f162a2f19d59a4b9095796402ffd4aa8803e32Pending(pending)2021-04-15 13:08:051 hr 18 mins ago0xeb72c93a34fa59e67497aa983575d09335ff8257 IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0.157 Ether(Pending)(Pending)
0x57f370e480d9f605f2775be4796781222317321dd13307be536efe6f49f5a0dfPending(pending)2021-04-15 13:05:111 hr 21 mins ago0x8d645707f4d07cada1998c7c8440922dff1883bf IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0 Ether(Pending)(Pending)
0xec2b7f7b3b31ae19f1b4f7db18e38c9c039e968f34c547bf49d38c894661f0bePending(pending)2021-04-15 13:05:111 hr 21 mins ago0x8d645707f4d07cada1998c7c8440922dff1883bf IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0 Ether(Pending)(Pending)
0x9f871831319750ec2d8481b1cc53e6df0d48a50b07073892a55f8a96bff9233ePending(pending)2021-04-15 12:58:141 hr 28 mins ago0x46bc8ccad847c8c6093efc072cebf196a7b7a245 IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0 Ether(Pending)(Pending)
0x9eaeee0b813c491a9ad2877057543a84302847114ae6838095fc343487e7194dPending(pending)2021-04-15 12:58:131 hr 28 mins ago0xf61c902fa0e085237f21a570c4045d26bf119cb6 IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0.157 Ether(Pending)(Pending)
0x3d7d5aa6ed07933f7810402c1d7cadbae927799484aec79bc94f5cf88dedfc0cPending(pending)2021-04-15 12:54:501 hr 31 mins ago0x3b3cc878fd599a84ad3f0bae1be83ae6da363582 IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0 Ether(Pending)(Pending)
0xcf20d8192c978e30e433ab7c89e6fb89fae65953b57e2fca19f19f4b2190f1dfPending(pending)2021-04-15 12:51:011 hr 35 mins ago0xb59921c16806d344ff2d81d6ba1cbbfde37ae89a IN 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0 Ether(Pending)(Pending)
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x2233baf627f4f24018ed4f0f42b793aab06023e4b3fcf335d3849ed93b5507f3122441062021-04-15 10:27:303 hrs 59 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x963bdc83c4a5b73c3d4252d91a0ed2bdb57895970.157 Ether
0xf3bafeaa9b269b395273642c9040cf54c8c196416f7813d6f05e41f0860dfea7122438202021-04-15 9:26:385 hrs ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x5f79df3242dbc53b54659540e7d7bde69162f7ac0.157 Ether
0x092a03c161b4cf59d609efcb4e9da1c7e547f58c443ab85305eaebb624160e32122437662021-04-15 9:14:275 hrs 12 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x6b4aa26ea2fca2c3939fc8dcbf8fc70bf9bc06170.157 Ether
0x28b71a507709d77a237591ae26818cf718a82a01fa17680dd72c399553d610a2122437532021-04-15 9:12:165 hrs 14 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x7fa8ad191176dcc5e0dfb57f6d5553e9406ef7bc0.157 Ether
0x08b46961381fca63ff0bc0b04463c40ec0c2b28978859be42da7dacc3de7fdea122437512021-04-15 9:11:585 hrs 14 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0xf4a16bc8a8d3e0c846c8675c52bed993464ac9da0.157 Ether
0x8ebf86d29641650eb6032ce268c6bced163c9dd0fab1949b7b50f461150c370c122436852021-04-15 8:57:235 hrs 29 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x56c7bf61f38c31694252e7cedb1629a83ddd2ed60.157 Ether
0xe44cfdb5173ce9d227c955ea8cc492b8f3a5df87181bfa3cd09042cc68af2ec2122435002021-04-15 8:16:596 hrs 9 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0xf089d54a33bc657cdaea8fa515de0b442deda9030.157 Ether
0x82b7963af381f58646d54df621f20d867c8cf0440ea326ad305076487284da0f122434782021-04-15 8:10:546 hrs 15 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0xf91ae60703c8be0b12706f810a459f9b61f199cf0.157 Ether
0x2f0c8f81a6ead33a664fdee8c2c0d055f7332f98c3191ce3681cb6870e326b11122434202021-04-15 7:59:456 hrs 27 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x1809a2c076c4d4695b414cec1394db402c3945390.157 Ether
0xd7a05729da66455eeebf289e9cf3a5dd4edf1cdfc2bce0f28086c2bbdc7718d3122433052021-04-15 7:27:556 hrs 58 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0xf1488f4be1cd535a8c8380d76d076bfed0b0b7410.157 Ether
0xe01cabdf23fc965a68f70683c9c0dd5529a1cc46a5f287f14befd167a6bf75e7122433032021-04-15 7:27:466 hrs 59 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x85d574f8b9cfcbc6893e81e6b0c11e7e53a90d1b0.157 Ether
0xbcb12053f3a5c5bb8fc17fb629a192f251e8fd5b7ada65afdc322a472d705bec122432942021-04-15 7:26:247 hrs ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x4a7f25b66812c0e9df04eaf9406c8e21b995efbe0.157 Ether
0x8eb04e46b241f69ee530020e0802667cfd9fff403af08b3278995ec66dd466cf122432212021-04-15 7:08:547 hrs 17 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x175e7e28cd3fc2434aac677c96d1ce2462903a430.157 Ether
0x13125eeb8ae96159d0200140d160a3323716ca0b1940d4a9b73159a19b94c87e122431822021-04-15 7:01:527 hrs 24 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x5e1a79fb66c048c90fc7185e0636d1bee41da4da0.157 Ether
0x9111af87b78fca9dd8938df39c883b5f6c55f173bd0122c26f7ca0cdda0d7dbb122430972021-04-15 6:41:467 hrs 45 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0xaf41615f5ba1189d1bef664595fca9f8cd38b0ac0.157 Ether
0x7a135ea5da0764b9a1b8367ef6cb68184180b896f60c94ef0ee986534a0d33de122430972021-04-15 6:41:467 hrs 45 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x226b42da20212bf79f185f335351ba23644afe6f0.157 Ether
0x73feec988ec9b7f27eeb315b2384f80bcd95f6b2185be804d90b0ed66fd4b6f1122430902021-04-15 6:41:017 hrs 45 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0xdecd0c8aa7619baea7b8ced2664fb8d7fa3a3c860.157 Ether
0x47bd01ac7bd0125225c60279462aa63abcdbfb00497cd6f6837fb9d6305390f0122430472021-04-15 6:32:527 hrs 53 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x5886f65425cad457776d7a89a399907c97e608e50.157 Ether
0xb9937469356dda255d40c428243ea57b5c924998af8cd38af313e18ad5f69d7e122430022021-04-15 6:21:258 hrs 5 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x02af0411f1ce321d1c85866af55f6dc7ec07e2f40.157 Ether
0x7de73d3b6282a0e96359511646d7c2c4e0d280c3800b9ebfcaec0a48e16c4c33122429102021-04-15 5:59:238 hrs 27 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x832c63c982e7f77c74f302d60de6c8c5e61fbff50.157 Ether
0x87871cb304ca81e21241c1124c4a37046cedd2d4339fb1c962462fbfa0124713122428962021-04-15 5:56:318 hrs 30 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x4a0dca1b6648513dc913986a40ae111605d569260.157 Ether
0xb7c526ae5885936b104142104b77594d8050fb657fd9dc63cd91af18466ed0f2122428862021-04-15 5:54:368 hrs 32 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x1189c8019d359467c26147313d23738afc37b5240.157 Ether
0x396b23ee2c8928a55c4389f943ac0ae1ef199f86467c5da9c65a50f8384641a9122428262021-04-15 5:40:398 hrs 46 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0xafc1b15de5b52f8412f4eee44e07048ca00ecc930.157 Ether
0x9c14a8a2ebf757d1bc344e6cc7073252476f67daa4a9276f01bc473b4abb027c122427342021-04-15 5:18:229 hrs 8 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x6dac1bc0fbfdd35cdfef8149530c90340190b50d0.157 Ether
0x403b69477af2c7a2f21ab6ebcab60e09dd94494fefb47654b84d98676fc46108122426992021-04-15 5:11:439 hrs 15 mins ago 0xc5e9ddebb09cd64dfacab4011a0d5cedaf7c9bdb0x6398b788f8c32ed641e6f78a20aa35dd7d982ea20.157 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ProofOfHumanity

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-03-10
*/

// File: https://github.com/kleros/ethereum-libraries/blob/39b54dec298117f9753d1a7dd2f08d596d26acdb/contracts/CappedMath.sol

/**
 *  @authors: [@mtsalenc]
 *  @reviewers: [@clesaege]
 *  @auditors: []
 *  @bounties: []
 *  @deployments: []
 */

pragma solidity ^0.5;


/**
 * @title CappedMath
 * @dev Math operations with caps for under and overflow.
 */
library CappedMath {
    uint constant private UINT_MAX = 2**256 - 1;
    uint64 constant private UINT64_MAX = 2**64 - 1;

    /**
     * @dev Adds two unsigned integers, returns 2^256 - 1 on overflow.
     */
    function addCap(uint _a, uint _b) internal pure returns (uint) {
        uint c = _a + _b;
        return c >= _a ? c : UINT_MAX;
    }

    /**
     * @dev Subtracts two integers, returns 0 on underflow.
     */
    function subCap(uint _a, uint _b) internal pure returns (uint) {
        if (_b > _a)
            return 0;
        else
            return _a - _b;
    }

    /**
     * @dev Multiplies two unsigned integers, returns 2^256 - 1 on overflow.
     */
    function mulCap(uint _a, uint _b) internal pure returns (uint) {
        // Gas optimization: this is cheaper than requiring '_a' not being zero, but the
        // benefit is lost if '_b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (_a == 0)
            return 0;

        uint c = _a * _b;
        return c / _a == _b ? c : UINT_MAX;
    }

    function addCap64(uint64 _a, uint64 _b) internal pure returns (uint64) {
        uint64 c = _a + _b;
        return c >= _a ? c : UINT64_MAX;
    }


    function subCap64(uint64 _a, uint64 _b) internal pure returns (uint64) {
        if (_b > _a)
            return 0;
        else
            return _a - _b;
    }

    function mulCap64(uint64 _a, uint64 _b) internal pure returns (uint64) {
        if (_a == 0)
            return 0;

        uint64 c = _a * _b;
        return c / _a == _b ? c : UINT64_MAX;
    }
}

// File: https://github.com/kleros/erc-792/blob/c00f37dacdbf296e038bbaec9ad86c6a2f4b48d1/contracts/erc-1497/IEvidence.sol

pragma solidity ^0.5;


/** @title IEvidence
 *  ERC-1497: Evidence Standard
 */
interface IEvidence {

    /** @dev To be emitted when meta-evidence is submitted.
     *  @param _metaEvidenceID Unique identifier of meta-evidence.
     *  @param _evidence A link to the meta-evidence JSON.
     */
    event MetaEvidence(uint indexed _metaEvidenceID, string _evidence);

    /** @dev To be raised when evidence is submitted. Should point to the resource (evidences are not to be stored on chain due to gas considerations).
     *  @param _arbitrator The arbitrator of the contract.
     *  @param _evidenceGroupID Unique identifier of the evidence group the evidence belongs to.
     *  @param _party The address of the party submiting the evidence. Note that 0x0 refers to evidence not submitted by any party.
     *  @param _evidence A URI to the evidence JSON file whose name should be its keccak256 hash followed by .json.
     */
    event Evidence(IArbitrator indexed _arbitrator, uint indexed _evidenceGroupID, address indexed _party, string _evidence);

    /** @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.
     *  @param _arbitrator The arbitrator of the contract.
     *  @param _disputeID ID of the dispute in the Arbitrator contract.
     *  @param _metaEvidenceID Unique identifier of meta-evidence.
     *  @param _evidenceGroupID Unique identifier of the evidence group that is linked to this dispute.
     */
    event Dispute(IArbitrator indexed _arbitrator, uint indexed _disputeID, uint _metaEvidenceID, uint _evidenceGroupID);

}

// File: https://github.com/kleros/erc-792/blob/c00f37dacdbf296e038bbaec9ad86c6a2f4b48d1/contracts/IArbitrator.sol

/**
 *  @title Arbitrator
 *  @author Clément Lesaege - <[email protected]>
 */

pragma solidity ^0.5;


/** @title Arbitrator
 *  Arbitrator abstract contract.
 *  When developing arbitrator contracts we need to:
 *  -Define the functions for dispute creation (createDispute) and appeal (appeal). Don't forget to store the arbitrated contract and the disputeID (which should be unique, may nbDisputes).
 *  -Define the functions for cost display (arbitrationCost and appealCost).
 *  -Allow giving rulings. For this a function must call arbitrable.rule(disputeID, ruling).
 */
interface IArbitrator {

    enum DisputeStatus {Waiting, Appealable, Solved}


    /** @dev To be emitted when a dispute is created.
     *  @param _disputeID ID of the dispute.
     *  @param _arbitrable The contract which created the dispute.
     */
    event DisputeCreation(uint indexed _disputeID, IArbitrable indexed _arbitrable);

    /** @dev To be emitted when a dispute can be appealed.
     *  @param _disputeID ID of the dispute.
     */
    event AppealPossible(uint indexed _disputeID, IArbitrable indexed _arbitrable);

    /** @dev To be emitted when the current ruling is appealed.
     *  @param _disputeID ID of the dispute.
     *  @param _arbitrable The contract which created the dispute.
     */
    event AppealDecision(uint indexed _disputeID, IArbitrable indexed _arbitrable);

    /** @dev Create a dispute. Must be called by the arbitrable contract.
     *  Must be paid at least arbitrationCost(_extraData).
     *  @param _choices Amount of choices the arbitrator can make in this dispute.
     *  @param _extraData Can be used to give additional info on the dispute to be created.
     *  @return disputeID ID of the dispute created.
     */
    function createDispute(uint _choices, bytes calldata _extraData) external payable returns(uint disputeID);

    /** @dev Compute the cost of arbitration. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation.
     *  @param _extraData Can be used to give additional info on the dispute to be created.
     *  @return cost Amount to be paid.
     */
    function arbitrationCost(bytes calldata _extraData) external view returns(uint cost);

    /** @dev Appeal a ruling. Note that it has to be called before the arbitrator contract calls rule.
     *  @param _disputeID ID of the dispute to be appealed.
     *  @param _extraData Can be used to give extra info on the appeal.
     */
    function appeal(uint _disputeID, bytes calldata _extraData) external payable;

    /** @dev Compute the cost of appeal. It is recommended not to increase it often, as it can be higly time and gas consuming for the arbitrated contracts to cope with fee augmentation.
     *  @param _disputeID ID of the dispute to be appealed.
     *  @param _extraData Can be used to give additional info on the dispute to be created.
     *  @return cost Amount to be paid.
     */
    function appealCost(uint _disputeID, bytes calldata _extraData) external view returns(uint cost);

    /** @dev Compute the start and end of the dispute's current or next appeal period, if possible. If not known or appeal is impossible: should return (0, 0).
     *  @param _disputeID ID of the dispute.
     *  @return The start and end of the period.
     */
    function appealPeriod(uint _disputeID) external view returns(uint start, uint end);

    /** @dev Return the status of a dispute.
     *  @param _disputeID ID of the dispute to rule.
     *  @return status The status of the dispute.
     */
    function disputeStatus(uint _disputeID) external view returns(DisputeStatus status);

    /** @dev Return the current ruling of a dispute. This is useful for parties to know if they should appeal.
     *  @param _disputeID ID of the dispute.
     *  @return ruling The ruling which has been given or the one which will be given if there is no appeal.
     */
    function currentRuling(uint _disputeID) external view returns(uint ruling);

}

// File: https://github.com/kleros/erc-792/blob/c00f37dacdbf296e038bbaec9ad86c6a2f4b48d1/contracts/IArbitrable.sol

/**
 *  @title IArbitrable
 *  @author Enrique Piqueras - <[email protected]>
 */

pragma solidity ^0.5;


/** @title IArbitrable
 *  Arbitrable interface.
 *  When developing arbitrable contracts, we need to:
 *  -Define the action taken when a ruling is received by the contract.
 *  -Allow dispute creation. For this a function must call arbitrator.createDispute.value(_fee)(_choices,_extraData);
 */
interface IArbitrable {

    /** @dev To be raised when a ruling is given.
     *  @param _arbitrator The arbitrator giving the ruling.
     *  @param _disputeID ID of the dispute in the Arbitrator contract.
     *  @param _ruling The ruling which was given.
     */
    event Ruling(IArbitrator indexed _arbitrator, uint indexed _disputeID, uint _ruling);

    /** @dev Give a ruling for a dispute. Must be called by the arbitrator.
     *  The purpose of this function is to ensure that the address calling it has the right to rule on the contract.
     *  @param _disputeID ID of the dispute in the Arbitrator contract.
     *  @param _ruling Ruling given by the arbitrator. Note that 0 is reserved for "Not able/wanting to make a decision".
     */
    function rule(uint _disputeID, uint _ruling) external;
}

// File: browser/github/Proof-Of-Humanity/Proof-Of-Humanity/contracts/ProofOfHumanity.sol

/**
 *  @authors: [@unknownunknown1, @nix1g]
 *  @reviewers: [@fnanni-0*, @mtsalenc*, @nix1g*, @clesaege*, @hbarcelos*, @ferittuncer]
 *  @auditors: []
 *  @bounties: []
 *  @deployments: []
 *  @tools: [MythX*]
 */

pragma solidity ^0.5.13;
pragma experimental ABIEncoderV2;

/**
 *  @title ProofOfHumanity
 *  This contract is a curated registry for people. The users are identified by their address and can be added or removed through the request-challenge protocol.
 *  In order to challenge a registration request the challenger must provide one of the four reasons.
 *  New registration requests firstly should gain sufficient amount of vouches from other registered users and only after that they can be accepted or challenged.
 *  The users who vouched for submission that lost the challenge with the reason Duplicate or DoesNotExist would be penalized with optional fine or ban period.
 *  NOTE: This contract trusts that the Arbitrator is honest and will not reenter or modify its costs during a call.
 *  The arbitrator must support appeal period.
 */
contract ProofOfHumanity is IArbitrable, IEvidence {
    using CappedMath for uint;
    using CappedMath for uint64;

    /* Constants and immutable */

    uint private constant RULING_OPTIONS = 2; // The amount of non 0 choices the arbitrator can give.
    uint private constant AUTO_PROCESSED_VOUCH = 10; // The number of vouches that will be automatically processed when executing a request.
    uint private constant FULL_REASONS_SET = 15; // Indicates that reasons' bitmap is full. 0b1111.
    uint private constant MULTIPLIER_DIVISOR = 10000; // Divisor parameter for multipliers.

    bytes32 private DOMAIN_SEPARATOR; // The EIP-712 domainSeparator specific to this deployed instance. It is used to verify the IsHumanVoucher's signature.
    bytes32 private constant IS_HUMAN_VOUCHER_TYPEHASH = 0xa9e3fa1df5c3dbef1e9cfb610fa780355a0b5e0acb0fa8249777ec973ca789dc; // The EIP-712 typeHash of IsHumanVoucher. keccak256("IsHumanVoucher(address vouchedSubmission,uint256 voucherExpirationTimestamp)").

    /* Enums */

    enum Status {
        None, // The submission doesn't have a pending status.
        Vouching, // The submission is in the state where it can be vouched for and crowdfunded.
        PendingRegistration, // The submission is in the state where it can be challenged. Or accepted to the list, if there are no challenges within the time limit.
        PendingRemoval // The submission is in the state where it can be challenged. Or removed from the list, if there are no challenges within the time limit.
    }

    enum Party {
        None, // Party per default when there is no challenger or requester. Also used for unconclusive ruling.
        Requester, // Party that made the request to change a status.
        Challenger // Party that challenged the request to change a status.
    }

    enum Reason {
        None, // No reason specified. This option should be used to challenge removal requests.
        IncorrectSubmission, // The submission does not comply with the submission rules.
        Deceased, // The submitter has existed but does not exist anymore.
        Duplicate, // The submitter is already registered. The challenger has to point to the identity already registered or to a duplicate submission.
        DoesNotExist // The submitter is not real. For example, this can be used for videos showing computer generated persons.
    }

    /* Structs */

    struct Submission {
        Status status; // The current status of the submission.
        bool registered; // Whether the submission is in the registry or not. Note that a registered submission won't have privileges (e.g. vouching) if its duration expired.
        bool hasVouched; // True if this submission used its vouch for another submission. This is set back to false once the vouch is processed.
        uint64 submissionTime; // The time when the submission was accepted to the list.
        uint64 index; // Index of a submission.
        Request[] requests; // List of status change requests made for the submission.
    }

    struct Request {
        bool disputed; // True if a dispute was raised. Note that the request can enter disputed state multiple times, once per reason.
        bool resolved; // True if the request is executed and/or all raised disputes are resolved.
        bool requesterLost; // True if the requester has already had a dispute that wasn't ruled in his favor.
        Reason currentReason; // Current reason a registration request was challenged with. Is left empty for removal requests.
        uint8 usedReasons; // Bitmap of the reasons used by challengers of this request.
        uint16 nbParallelDisputes; // Tracks the number of simultaneously raised disputes. Parallel disputes are only allowed for reason Duplicate.
        uint16 arbitratorDataID; // The index of the relevant arbitratorData struct. All the arbitrator info is stored in a separate struct to reduce gas cost.
        uint16 lastChallengeID; // The ID of the last challenge, which is equal to the total number of challenges for the request.
        uint32 lastProcessedVouch; // Stores the index of the last processed vouch in the array of vouches. It is used for partial processing of the vouches in resolved submissions.
        uint64 currentDuplicateIndex; // Stores the index of the duplicate submission provided by the challenger who is currently winning.
        uint64 challengePeriodStart; // Time when the submission can be challenged.
        address payable requester; // Address that made a request. It is left empty for the registration requests since it matches submissionID in that case.
        address payable ultimateChallenger; // Address of the challenger who won a dispute and who users that vouched for the request must pay the fines to.
        address[] vouches; // Stores the addresses of submissions that vouched for this request and whose vouches were used in this request.
        mapping(uint => Challenge) challenges; // Stores all the challenges of this request. challengeID -> Challenge.
        mapping(address => bool) challengeDuplicates; // Indicates whether a certain duplicate address has been used in a challenge or not.
    }

    // Some arrays below have 3 elements to map with the Party enums for better readability:
    // - 0: is unused, matches `Party.None`.
    // - 1: for `Party.Requester`.
    // - 2: for `Party.Challenger`.
    struct Round {
        uint[3] paidFees; // Tracks the fees paid by each side in this round.
        Party sideFunded; // Stores the side that successfully paid the appeal fees in the latest round. Note that if both sides have paid a new round is created.
        uint feeRewards; // Sum of reimbursable fees and stake rewards available to the parties that made contributions to the side that ultimately wins a dispute.
        mapping(address => uint[3]) contributions; // Maps contributors to their contributions for each side.
    }

    struct Challenge {
        uint disputeID; // The ID of the dispute related to the challenge.
        Party ruling; // Ruling given by the arbitrator of the dispute.
        uint16 lastRoundID; // The ID of the last round.
        uint64 duplicateSubmissionIndex; // Index of a submission, which is a supposed duplicate of a challenged submission. It is only used for reason Duplicate.
        address payable challenger; // Address that challenged the request.
        mapping(uint => Round) rounds; // Tracks the info of each funding round of the challenge.
    }

    // The data tied to the arbitrator that will be needed to recover the submission info for arbitrator's call.
    struct DisputeData {
        uint96 challengeID; // The ID of the challenge of the request.
        address submissionID; // The submission, which ongoing request was challenged.
    }

    struct ArbitratorData {
        IArbitrator arbitrator; // Address of the trusted arbitrator to solve disputes.
        uint96 metaEvidenceUpdates; // The meta evidence to be used in disputes.
        bytes arbitratorExtraData; // Extra data for the arbitrator.
    }

    /* Storage */

    address public governor; // The address that can make governance changes to the parameters of the contract.

    uint public submissionBaseDeposit; // The base deposit to make a new request for a submission.

    // Note that to ensure correct contract behaviour the sum of challengePeriodDuration and renewalPeriodDuration should be less than submissionDuration.
    uint64 public submissionDuration; // Time after which the registered submission will no longer be considered registered. The submitter has to reapply to the list to refresh it.
    uint64 public renewalPeriodDuration; //  The duration of the period when the registered submission can reapply.
    uint64 public challengePeriodDuration; // The time after which a request becomes executable if not challenged. Note that this value should be less than the time spent on potential dispute's resolution, to avoid complications of parallel dispute handling.

    uint64 public requiredNumberOfVouches; // The number of registered users that have to vouch for a new registration request in order for it to enter PendingRegistration state.

    uint public sharedStakeMultiplier; // Multiplier for calculating the fee stake that must be paid in the case where arbitrator refused to arbitrate.
    uint public winnerStakeMultiplier; // Multiplier for calculating the fee stake paid by the party that won the previous round.
    uint public loserStakeMultiplier; // Multiplier for calculating the fee stake paid by the party that lost the previous round.

    uint public submissionCounter; // The total count of all submissions that made a registration request at some point. Includes manually added submissions as well.

    ArbitratorData[] public arbitratorDataList; // Stores the arbitrator data of the contract. Updated each time the data is changed.

    mapping(address => Submission) private submissions; // Maps the submission ID to its data. submissions[submissionID]. It is private because of getSubmissionInfo().
    mapping(address => mapping(address => bool)) public vouches; // Indicates whether or not the voucher has vouched for a certain submission. vouches[voucherID][submissionID].
    mapping(address => mapping(uint => DisputeData)) public arbitratorDisputeIDToDisputeData; // Maps a dispute ID with its data. arbitratorDisputeIDToDisputeData[arbitrator][disputeID].

    /* Modifiers */

    modifier onlyGovernor {require(msg.sender == governor, "The caller must be the governor"); _;}

    /* Events */

    /**
     *  @dev Emitted when a vouch is added.
     *  @param _submissionID The submission that receives the vouch.
     *  @param _voucher The address that vouched.
     */
    event VouchAdded(address indexed _submissionID, address indexed _voucher);

    /**
     *  @dev Emitted when a vouch is removed.
     *  @param _submissionID The submission which vouch is removed.
     *  @param _voucher The address that removes its vouch.
     */
    event VouchRemoved(address indexed _submissionID, address indexed _voucher);

    /** @dev Emitted when the request to add a submission to the registry is made.
     *  @param _submissionID The ID of the submission.
     *  @param _requestID The ID of the newly created request.
     */
    event AddSubmission(address indexed _submissionID, uint _requestID);

    /** @dev Emitted when the reapplication request is made.
     *  @param _submissionID The ID of the submission.
     *  @param _requestID The ID of the newly created request.
     */
    event ReapplySubmission(address indexed _submissionID, uint _requestID);

    /** @dev Emitted when the removal request is made.
     *  @param _requester The address that made the request.
     *  @param _submissionID The ID of the submission.
     *  @param _requestID The ID of the newly created request.
     */
    event RemoveSubmission(address indexed _requester, address indexed _submissionID, uint _requestID);

    /** @dev Emitted when the submission is challenged.
     *  @param _submissionID The ID of the submission.
     *  @param _requestID The ID of the latest request.
     *  @param _challengeID The ID of the challenge.
     */
    event SubmissionChallenged(address indexed _submissionID, uint indexed _requestID, uint _challengeID);

    /** @dev To be emitted when someone contributes to the appeal process.
     *  @param _submissionID The ID of the submission.
     *  @param _challengeID The index of the challenge.
     *  @param _party The party which received the contribution.
     *  @param _contributor The address of the contributor.
     *  @param _amount The amount contributed.
     */
    event AppealContribution(address indexed _submissionID, uint indexed _challengeID, Party _party, address indexed _contributor, uint _amount);

    /** @dev Emitted when one of the parties successfully paid its appeal fees.
     *  @param _submissionID The ID of the submission.
     *  @param _challengeID The index of the challenge which appeal was funded.
     *  @param _side The side that is fully funded.
     */
    event HasPaidAppealFee(address indexed _submissionID, uint indexed _challengeID, Party _side);

    /** @dev Emitted when the challenge is resolved.
     *  @param _submissionID The ID of the submission.
     *  @param _requestID The ID of the latest request.
     *  @param _challengeID The ID of the challenge that was resolved.
     */
    event ChallengeResolved(address indexed _submissionID, uint indexed _requestID, uint _challengeID);

    /** @dev Emitted in the constructor using most of its parameters.
     *  This event is needed for Subgraph. ArbitratorExtraData and renewalPeriodDuration are not needed for this event.
     */
    event ArbitratorComplete(
        IArbitrator _arbitrator,
        address indexed _governor,
        uint _submissionBaseDeposit,
        uint _submissionDuration,
        uint _challengePeriodDuration,
        uint _requiredNumberOfVouches,
        uint _sharedStakeMultiplier,
        uint _winnerStakeMultiplier,
        uint _loserStakeMultiplier
    );

    /** @dev Constructor.
     *  @param _arbitrator The trusted arbitrator to resolve potential disputes.
     *  @param _arbitratorExtraData Extra data for the trusted arbitrator contract.
     *  @param _registrationMetaEvidence The URI of the meta evidence object for registration requests.
     *  @param _clearingMetaEvidence The URI of the meta evidence object for clearing requests.
     *  @param _submissionBaseDeposit The base deposit to make a request for a submission.
     *  @param _submissionDuration Time in seconds during which the registered submission won't automatically lose its status.
     *  @param _renewalPeriodDuration Value that defines the duration of submission's renewal period.
     *  @param _challengePeriodDuration The time in seconds during which the request can be challenged.
     *  @param _multipliers The array that contains fee stake multipliers to avoid 'stack too deep' error.
     *  @param _requiredNumberOfVouches The number of vouches the submission has to have to pass from Vouching to PendingRegistration state.
     */
    constructor(
        IArbitrator _arbitrator,
        bytes memory _arbitratorExtraData,
        string memory _registrationMetaEvidence,
        string memory _clearingMetaEvidence,
        uint _submissionBaseDeposit,
        uint64 _submissionDuration,
        uint64 _renewalPeriodDuration,
        uint64 _challengePeriodDuration,
        uint[3] memory _multipliers,
        uint64 _requiredNumberOfVouches
    ) public {
        emit MetaEvidence(0, _registrationMetaEvidence);
        emit MetaEvidence(1, _clearingMetaEvidence);

        governor = msg.sender;
        submissionBaseDeposit = _submissionBaseDeposit;
        submissionDuration = _submissionDuration;
        renewalPeriodDuration = _renewalPeriodDuration;
        challengePeriodDuration = _challengePeriodDuration;
        sharedStakeMultiplier = _multipliers[0];
        winnerStakeMultiplier = _multipliers[1];
        loserStakeMultiplier = _multipliers[2];
        requiredNumberOfVouches = _requiredNumberOfVouches;

        ArbitratorData storage arbitratorData = arbitratorDataList[arbitratorDataList.length++];
        arbitratorData.arbitrator = _arbitrator;
        arbitratorData.arbitratorExtraData = _arbitratorExtraData;
        emit ArbitratorComplete(_arbitrator, msg.sender, _submissionBaseDeposit, _submissionDuration, _challengePeriodDuration, _requiredNumberOfVouches, _multipliers[0], _multipliers[1], _multipliers[2]);

        // EIP-712.
        bytes32 DOMAIN_TYPEHASH = 0x8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866; // keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)").
        uint256 chainId;
        assembly { chainId := chainid } // block.chainid got introduced in Solidity v0.8.0.
        DOMAIN_SEPARATOR = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256("Proof of Humanity"), chainId, address(this)));
    }

    /* External and Public */

    // ************************ //
    // *      Governance      * //
    // ************************ //

    /** @dev Allows the governor to directly add new submissions to the list as a part of the seeding event.
     *  @param _submissionIDs The addresses of newly added submissions.
     *  @param _evidence The array of evidence links for each submission.
     *  @param _names The array of names of the submitters. This parameter is for Subgraph only and it won't be used in this function.
     */
    function addSubmissionManually(address[] calldata _submissionIDs, string[] calldata _evidence, string[] calldata _names) external onlyGovernor {
        uint counter = submissionCounter;
        uint arbitratorDataID = arbitratorDataList.length - 1;
        for (uint i = 0; i < _submissionIDs.length; i++) {
            Submission storage submission = submissions[_submissionIDs[i]];
            require(submission.requests.length == 0, "Submission already been created");
            submission.index = uint64(counter);
            counter++;

            Request storage request = submission.requests[submission.requests.length++];
            submission.registered = true;

            submission.submissionTime = uint64(now);
            request.arbitratorDataID = uint16(arbitratorDataID);
            request.resolved = true;

            if (bytes(_evidence[i]).length > 0)
                emit Evidence(arbitratorDataList[arbitratorDataID].arbitrator, uint(_submissionIDs[i]), msg.sender, _evidence[i]);
        }
        submissionCounter = counter;
    }

    /** @dev Allows the governor to directly remove a registered entry from the list as a part of the seeding event.
     *  @param _submissionID The address of a submission to remove.
     */
    function removeSubmissionManually(address _submissionID) external onlyGovernor {
        Submission storage submission = submissions[_submissionID];
        require(submission.registered && submission.status == Status.None, "Wrong status");
        submission.registered = false;
    }

    /** @dev Change the base amount required as a deposit to make a request for a submission.
     *  @param _submissionBaseDeposit The new base amount of wei required to make a new request.
     */
    function changeSubmissionBaseDeposit(uint _submissionBaseDeposit) external onlyGovernor {
        submissionBaseDeposit = _submissionBaseDeposit;
    }

    /** @dev Change the duration of the submission, renewal and challenge periods.
     *  @param _submissionDuration The new duration of the time the submission is considered registered.
     *  @param _renewalPeriodDuration The new value that defines the duration of submission's renewal period.
     *  @param _challengePeriodDuration The new duration of the challenge period. It should be lower than the time for a dispute.
     */
    function changeDurations(uint64 _submissionDuration, uint64 _renewalPeriodDuration, uint64 _challengePeriodDuration) external onlyGovernor {
        require(_challengePeriodDuration.addCap64(_renewalPeriodDuration) < _submissionDuration, "Incorrect inputs");
        submissionDuration = _submissionDuration;
        renewalPeriodDuration = _renewalPeriodDuration;
        challengePeriodDuration = _challengePeriodDuration;
    }

    /** @dev Change the number of vouches required for the request to pass to the pending state.
     *  @param _requiredNumberOfVouches The new required number of vouches.
     */
    function changeRequiredNumberOfVouches(uint64 _requiredNumberOfVouches) external onlyGovernor {
        requiredNumberOfVouches = _requiredNumberOfVouches;
    }

    /** @dev Change the proportion of arbitration fees that must be paid as fee stake by parties when there is no winner or loser (e.g. when the arbitrator refused to rule).
     *  @param _sharedStakeMultiplier Multiplier of arbitration fees that must be paid as fee stake. In basis points.
     */
    function changeSharedStakeMultiplier(uint _sharedStakeMultiplier) external onlyGovernor {
        sharedStakeMultiplier = _sharedStakeMultiplier;
    }

    /** @dev Change the proportion of arbitration fees that must be paid as fee stake by the winner of the previous round.
     *  @param _winnerStakeMultiplier Multiplier of arbitration fees that must be paid as fee stake. In basis points.
     */
    function changeWinnerStakeMultiplier(uint _winnerStakeMultiplier) external onlyGovernor {
        winnerStakeMultiplier = _winnerStakeMultiplier;
    }

    /** @dev Change the proportion of arbitration fees that must be paid as fee stake by the party that lost the previous round.
     *  @param _loserStakeMultiplier Multiplier of arbitration fees that must be paid as fee stake. In basis points.
     */
    function changeLoserStakeMultiplier(uint _loserStakeMultiplier) external onlyGovernor {
        loserStakeMultiplier = _loserStakeMultiplier;
    }

    /** @dev Change the governor of the contract.
     *  @param _governor The address of the new governor.
     */
    function changeGovernor(address _governor) external onlyGovernor {
        governor = _governor;
    }

    /** @dev Update the meta evidence used for disputes.
     *  @param _registrationMetaEvidence The meta evidence to be used for future registration request disputes.
     *  @param _clearingMetaEvidence The meta evidence to be used for future clearing request disputes.
     */
    function changeMetaEvidence(string calldata _registrationMetaEvidence, string calldata _clearingMetaEvidence) external onlyGovernor {
        ArbitratorData storage arbitratorData = arbitratorDataList[arbitratorDataList.length - 1];
        uint96 newMetaEvidenceUpdates = arbitratorData.metaEvidenceUpdates + 1;
        arbitratorDataList.push(ArbitratorData({
            arbitrator: arbitratorData.arbitrator,
            metaEvidenceUpdates: newMetaEvidenceUpdates,
            arbitratorExtraData: arbitratorData.arbitratorExtraData
        }));
        emit MetaEvidence(2 * newMetaEvidenceUpdates, _registrationMetaEvidence);
        emit MetaEvidence(2 * newMetaEvidenceUpdates + 1, _clearingMetaEvidence);
    }

    /** @dev Change the arbitrator to be used for disputes that may be raised in the next requests. The arbitrator is trusted to support appeal period and not reenter.
     *  @param _arbitrator The new trusted arbitrator to be used in the next requests.
     *  @param _arbitratorExtraData The extra data used by the new arbitrator.
     */
    function changeArbitrator(IArbitrator _arbitrator, bytes calldata _arbitratorExtraData) external onlyGovernor {
        ArbitratorData storage arbitratorData = arbitratorDataList[arbitratorDataList.length - 1];
        arbitratorDataList.push(ArbitratorData({
            arbitrator: _arbitrator,
            metaEvidenceUpdates: arbitratorData.metaEvidenceUpdates,
            arbitratorExtraData: _arbitratorExtraData
        }));
    }

    // ************************ //
    // *       Requests       * //
    // ************************ //

    /** @dev Make a request to add a new entry to the list. Paying the full deposit right away is not required as it can be crowdfunded later.
     *  @param _evidence A link to evidence using its URI.
     *  @param _name The name of the submitter. This parameter is for Subgraph only and it won't be used in this function.
     */
    function addSubmission(string calldata _evidence, string calldata _name) external payable {
        Submission storage submission = submissions[msg.sender];
        require(!submission.registered && submission.status == Status.None, "Wrong status");
        if (submission.requests.length == 0) {
            submission.index = uint64(submissionCounter);
            submissionCounter++;
        }
        submission.status = Status.Vouching;
        emit AddSubmission(msg.sender, submission.requests.length);
        requestRegistration(msg.sender, _evidence);
    }

    /** @dev Make a request to refresh a submissionDuration. Paying the full deposit right away is not required as it can be crowdfunded later.
     *  Note that the user can reapply even when current submissionDuration has not expired, but only after the start of renewal period.
     *  @param _evidence A link to evidence using its URI.
     *  @param _name The name of the submitter. This parameter is for Subgraph only and it won't be used in this function.
     */
    function reapplySubmission(string calldata _evidence, string calldata _name) external payable {
        Submission storage submission = submissions[msg.sender];
        require(submission.registered && submission.status == Status.None, "Wrong status");
        uint renewalAvailableAt = submission.submissionTime.addCap64(submissionDuration.subCap64(renewalPeriodDuration));
        require(now >= renewalAvailableAt, "Can't reapply yet");
        submission.status = Status.Vouching;
        emit ReapplySubmission(msg.sender, submission.requests.length);
        requestRegistration(msg.sender, _evidence);
    }

    /** @dev Make a request to remove a submission from the list. Requires full deposit. Accepts enough ETH to cover the deposit, reimburses the rest.
     *  Note that this request can't be made during the renewal period to avoid spam leading to submission's expiration.
     *  @param _submissionID The address of the submission to remove.
     *  @param _evidence A link to evidence using its URI.
     */
    function removeSubmission(address _submissionID, string calldata _evidence) external payable {
        Submission storage submission = submissions[_submissionID];
        require(submission.registered && submission.status == Status.None, "Wrong status");
        uint renewalAvailableAt = submission.submissionTime.addCap64(submissionDuration.subCap64(renewalPeriodDuration));
        require(now < renewalAvailableAt, "Can't remove after renewal");
        submission.status = Status.PendingRemoval;

        Request storage request = submission.requests[submission.requests.length++];
        request.requester = msg.sender;
        request.challengePeriodStart = uint64(now);

        uint arbitratorDataID = arbitratorDataList.length - 1;
        request.arbitratorDataID = uint16(arbitratorDataID);

        Round storage round = request.challenges[0].rounds[0];

        IArbitrator requestArbitrator = arbitratorDataList[arbitratorDataID].arbitrator;
        uint arbitrationCost = requestArbitrator.arbitrationCost(arbitratorDataList[arbitratorDataID].arbitratorExtraData);
        uint totalCost = arbitrationCost.addCap(submissionBaseDeposit);
        contribute(round, Party.Requester, msg.sender, msg.value, totalCost);

        require(round.paidFees[uint(Party.Requester)] >= totalCost, "You must fully fund your side");
        round.sideFunded = Party.Requester;

        emit RemoveSubmission(msg.sender, _submissionID, submission.requests.length - 1);

        if (bytes(_evidence).length > 0)
            emit Evidence(requestArbitrator, submission.requests.length - 1 + uint(_submissionID), msg.sender, _evidence);
    }

    /** @dev Fund the requester's deposit. Accepts enough ETH to cover the deposit, reimburses the rest.
     *  @param _submissionID The address of the submission which ongoing request to fund.
     */
    function fundSubmission(address _submissionID) external payable {
        Submission storage submission = submissions[_submissionID];
        require(submission.status == Status.Vouching, "Wrong status");
        Request storage request = submission.requests[submission.requests.length - 1];
        Challenge storage challenge = request.challenges[0];
        Round storage round = challenge.rounds[0];

        ArbitratorData storage arbitratorData = arbitratorDataList[request.arbitratorDataID];
        uint arbitrationCost = arbitratorData.arbitrator.arbitrationCost(arbitratorData.arbitratorExtraData);
        uint totalCost = arbitrationCost.addCap(submissionBaseDeposit);
        contribute(round, Party.Requester, msg.sender, msg.value, totalCost);

        if (round.paidFees[uint(Party.Requester)] >= totalCost)
            round.sideFunded = Party.Requester;
    }

    /** @dev Vouch for the submission. Note that the event spam is not an issue as it will be handled by the UI.
     *  @param _submissionID The address of the submission to vouch for.
     */
    function addVouch(address _submissionID) external {
        vouches[msg.sender][_submissionID] = true;
        emit VouchAdded(_submissionID, msg.sender);
    }

    /** @dev Remove the submission's vouch that has been added earlier. Note that the event spam is not an issue as it will be handled by the UI.
     *  @param _submissionID The address of the submission to remove vouch from.
     */
    function removeVouch(address _submissionID) external {
        vouches[msg.sender][_submissionID] = false;
        emit VouchRemoved(_submissionID, msg.sender);
    }

    /** @dev Allows to withdraw a mistakenly added submission while it's still in a vouching state.
     */
    function withdrawSubmission() external {
        Submission storage submission = submissions[msg.sender];
        require(submission.status == Status.Vouching, "Wrong status");
        Request storage request = submission.requests[submission.requests.length - 1];

        submission.status = Status.None;
        request.resolved = true;

        withdrawFeesAndRewards(msg.sender, msg.sender, submission.requests.length - 1, 0, 0); // Automatically withdraw for the requester.
    }

    /** @dev Change submission's state from Vouching to PendingRegistration if all conditions are met.
     *  @param _submissionID The address of the submission which status to change.
     *  @param _vouches Array of users whose vouches to count.
     *  @param _signatures Array of EIP-712 signatures of struct IsHumanVoucher (optional).
     *  @param _expirationTimestamps Array of expiration timestamps for each signature (optional).
     *  struct IsHumanVoucher {
     *      address vouchedSubmission;
     *      uint256 voucherExpirationTimestamp;
     *  }
     */
    function changeStateToPending(address _submissionID, address[] calldata _vouches, bytes[] calldata _signatures, uint[] calldata _expirationTimestamps) external {
        Submission storage submission = submissions[_submissionID];
        require(submission.status == Status.Vouching, "Wrong status");
        Request storage request = submission.requests[submission.requests.length - 1];
        /* solium-disable indentation */
        {
            Challenge storage challenge = request.challenges[0];
            Round storage round = challenge.rounds[0];
            require(round.sideFunded == Party.Requester, "Requester is not funded");
        }
        /* solium-enable indentation */
        uint timeOffset = now - submissionDuration; // Precompute the offset before the loop for efficiency and then compare it with the submission time to check the expiration.

        bytes2 PREFIX = "\x19\x01";
        for (uint i = 0; i < _signatures.length && request.vouches.length < requiredNumberOfVouches; i++) {
            address voucherAddress;
            /* solium-disable indentation */
            {
                // Get typed structure hash.
                bytes32 messageHash = keccak256(abi.encode(IS_HUMAN_VOUCHER_TYPEHASH, _submissionID, _expirationTimestamps[i]));
                bytes32 hash = keccak256(abi.encodePacked(PREFIX, DOMAIN_SEPARATOR, messageHash));

                // Decode the signature.
                bytes memory signature = _signatures[i];
                bytes32 r;
                bytes32 s;
                uint8 v;
                assembly {
                    r := mload(add(signature, 0x20))
                    s := mload(add(signature, 0x40))
                    v := byte(0, mload(add(signature, 0x60)))
                }
                if (v < 27) v += 27;
                require(v == 27 || v == 28, "Invalid signature");

                // Recover the signer's address.
                voucherAddress = ecrecover(hash, v, r, s);
            }
            /* solium-enable indentation */

            Submission storage voucher = submissions[voucherAddress];
            if (!voucher.hasVouched && voucher.registered && timeOffset <= voucher.submissionTime &&
            now < _expirationTimestamps[i] && _submissionID != voucherAddress) {
                request.vouches.push(voucherAddress);
                voucher.hasVouched = true;
                emit VouchAdded(_submissionID, voucherAddress);
            }
        }

        for (uint i = 0; i<_vouches.length && request.vouches.length<requiredNumberOfVouches; i++) {
            // Check that the vouch isn't currently used by another submission and the voucher has a right to vouch.
            Submission storage voucher = submissions[_vouches[i]];
            if (!voucher.hasVouched && voucher.registered && timeOffset <= voucher.submissionTime &&
            vouches[_vouches[i]][_submissionID] && _submissionID != _vouches[i]) {
                request.vouches.push(_vouches[i]);
                voucher.hasVouched = true;
            }
        }
        require(request.vouches.length >= requiredNumberOfVouches, "Not enough valid vouches");
        submission.status = Status.PendingRegistration;
        request.challengePeriodStart = uint64(now);
    }

    /** @dev Challenge the submission's request. Accepts enough ETH to cover the deposit, reimburses the rest.
     *  @param _submissionID The address of the submission which request to challenge.
     *  @param _reason The reason to challenge the request. Left empty for removal requests.
     *  @param _duplicateID The address of a supposed duplicate submission. Ignored if the reason is not Duplicate.
     *  @param _evidence A link to evidence using its URI. Ignored if not provided.
     */
    function challengeRequest(address _submissionID, Reason _reason, address _duplicateID, string calldata _evidence) external payable {
        Submission storage submission = submissions[_submissionID];
        if (submission.status == Status.PendingRegistration)
            require(_reason != Reason.None, "Reason must be specified");
        else if (submission.status == Status.PendingRemoval)
            require(_reason == Reason.None, "Reason must be left empty");
        else
            revert("Wrong status");

        Request storage request = submission.requests[submission.requests.length - 1];
        require(now - request.challengePeriodStart <= challengePeriodDuration, "Time to challenge has passed");

        Challenge storage challenge = request.challenges[request.lastChallengeID];
        /* solium-disable indentation */
        {
            Reason currentReason = request.currentReason;
            if (_reason == Reason.Duplicate) {
                require(submissions[_duplicateID].status > Status.None || submissions[_duplicateID].registered, "Wrong duplicate status");
                require(_submissionID != _duplicateID, "Can't be a duplicate of itself");
                require(currentReason == Reason.Duplicate || currentReason == Reason.None, "Another reason is active");
                require(!request.challengeDuplicates[_duplicateID], "Duplicate address already used");
                request.challengeDuplicates[_duplicateID] = true;
                challenge.duplicateSubmissionIndex = submissions[_duplicateID].index;
            } else
                require(!request.disputed, "The request is disputed");

            if (currentReason != _reason) {
                uint8 reasonBit = 1 << (uint8(_reason) - 1); // Get the bit that corresponds with reason's index.
                require((reasonBit & ~request.usedReasons) == reasonBit, "The reason has already been used");

                request.usedReasons ^= reasonBit; // Mark the bit corresponding with reason's index as 'true', to indicate that the reason was used.
                request.currentReason = _reason;
            }
        }
        /* solium-enable indentation */

        Round storage round = challenge.rounds[0];
        ArbitratorData storage arbitratorData = arbitratorDataList[request.arbitratorDataID];

        uint arbitrationCost = arbitratorData.arbitrator.arbitrationCost(arbitratorData.arbitratorExtraData);
        contribute(round, Party.Challenger, msg.sender, msg.value, arbitrationCost);
        require(round.paidFees[uint(Party.Challenger)] >= arbitrationCost, "You must fully fund your side");
        round.feeRewards = round.feeRewards.subCap(arbitrationCost);
        round.sideFunded = Party.None; // Set this back to 0, since it's no longer relevant as the new round is created.

        challenge.disputeID = arbitratorData.arbitrator.createDispute.value(arbitrationCost)(RULING_OPTIONS, arbitratorData.arbitratorExtraData);
        challenge.challenger = msg.sender;

        DisputeData storage disputeData = arbitratorDisputeIDToDisputeData[address(arbitratorData.arbitrator)][challenge.disputeID];
        disputeData.challengeID = uint96(request.lastChallengeID);
        disputeData.submissionID = _submissionID;

        request.disputed = true;
        request.nbParallelDisputes++;

        challenge.lastRoundID++;
        emit SubmissionChallenged(_submissionID, submission.requests.length - 1, disputeData.challengeID);

        request.lastChallengeID++;

        emit Dispute(
            arbitratorData.arbitrator,
            challenge.disputeID,
            submission.status == Status.PendingRegistration ? 2 * arbitratorData.metaEvidenceUpdates : 2 * arbitratorData.metaEvidenceUpdates + 1,
            submission.requests.length - 1 + uint(_submissionID)
        );

        if (bytes(_evidence).length > 0)
            emit Evidence(arbitratorData.arbitrator, submission.requests.length - 1 + uint(_submissionID), msg.sender, _evidence);
    }

    /** @dev Takes up to the total amount required to fund a side of an appeal. Reimburses the rest. Creates an appeal if both sides are fully funded.
     *  @param _submissionID The address of the submission which request to fund.
     *  @param _challengeID The index of a dispute, created for the request.
     *  @param _side The recipient of the contribution.
     */
    function fundAppeal(address _submissionID, uint _challengeID, Party _side) external payable {
        require(_side != Party.None); // You can only fund either requester or challenger.
        Submission storage submission = submissions[_submissionID];
        require(submission.status == Status.PendingRegistration || submission.status == Status.PendingRemoval, "Wrong status");
        Request storage request = submission.requests[submission.requests.length - 1];
        require(request.disputed, "No dispute to appeal");
        require(_challengeID < request.lastChallengeID, "Challenge out of bounds");

        Challenge storage challenge = request.challenges[_challengeID];
        ArbitratorData storage arbitratorData = arbitratorDataList[request.arbitratorDataID];

        (uint appealPeriodStart, uint appealPeriodEnd) = arbitratorData.arbitrator.appealPeriod(challenge.disputeID);
        require(now >= appealPeriodStart && now < appealPeriodEnd, "Appeal period is over");

        uint multiplier;
        /* solium-disable indentation */
        {
            Party winner = Party(arbitratorData.arbitrator.currentRuling(challenge.disputeID));
            if (winner == _side){
                multiplier = winnerStakeMultiplier;
            } else if (winner == Party.None){
                multiplier = sharedStakeMultiplier;
            } else {
                multiplier = loserStakeMultiplier;
                require(now-appealPeriodStart < (appealPeriodEnd-appealPeriodStart)/2, "Appeal period is over for loser");
            }
        }
        /* solium-enable indentation */

        Round storage round = challenge.rounds[challenge.lastRoundID];
        require(_side != round.sideFunded, "Side is already funded");

        uint appealCost = arbitratorData.arbitrator.appealCost(challenge.disputeID, arbitratorData.arbitratorExtraData);
        uint totalCost = appealCost.addCap((appealCost.mulCap(multiplier)) / MULTIPLIER_DIVISOR);
        uint contribution = contribute(round, _side, msg.sender, msg.value, totalCost);
        emit AppealContribution(_submissionID, _challengeID, _side, msg.sender, contribution);

        if (round.paidFees[uint(_side)] >= totalCost) {
            if (round.sideFunded == Party.None) {
                round.sideFunded = _side;
            } else {
                // Both sides are fully funded. Create an appeal.
                arbitratorData.arbitrator.appeal.value(appealCost)(challenge.disputeID, arbitratorData.arbitratorExtraData);
                challenge.lastRoundID++;
                round.feeRewards = round.feeRewards.subCap(appealCost);
                round.sideFunded = Party.None; // Set this back to default in the past round as it's no longer relevant.
            }
            emit HasPaidAppealFee(_submissionID, _challengeID, _side);
        }
    }

    /** @dev Execute a request if the challenge period passed and no one challenged the request.
     *  @param _submissionID The address of the submission with the request to execute.
     */
    function executeRequest(address _submissionID) external {
        Submission storage submission = submissions[_submissionID];
        uint requestID = submission.requests.length - 1;
        Request storage request = submission.requests[requestID];
        require(now - request.challengePeriodStart > challengePeriodDuration, "Can't execute yet");
        require(!request.disputed, "The request is disputed");
        address payable requester;
        if (submission.status == Status.PendingRegistration) {
            // It is possible for the requester to lose without a dispute if he was penalized for bad vouching while reapplying.
            if (!request.requesterLost) {
                submission.registered = true;
                submission.submissionTime = uint64(now);
            }
            requester = address(uint160(_submissionID));
        } else if (submission.status == Status.PendingRemoval) {
            submission.registered = false;
            requester = request.requester;
        } else
            revert("Incorrect status.");

        submission.status = Status.None;
        request.resolved = true;

        if (request.vouches.length != 0)
            processVouches(_submissionID, requestID, AUTO_PROCESSED_VOUCH);

        withdrawFeesAndRewards(requester, _submissionID, requestID, 0, 0); // Automatically withdraw for the requester.
    }

    /** @dev Processes vouches of the resolved request, so vouchings of users who vouched for it can be used in other submissions.
     *  Penalizes users who vouched for bad submissions.
     *  @param _submissionID The address of the submission which vouches to iterate.
     *  @param _requestID The ID of the request which vouches to iterate.
     *  @param _iterations The number of iterations to go through.
     */
    function processVouches(address _submissionID, uint _requestID, uint _iterations) public {
        Submission storage submission = submissions[_submissionID];
        Request storage request = submission.requests[_requestID];
        require(request.resolved, "Submission must be resolved");

        uint lastProcessedVouch = request.lastProcessedVouch;
        uint endIndex = _iterations.addCap(lastProcessedVouch);
        uint vouchCount = request.vouches.length;

        if (endIndex > vouchCount)
            endIndex = vouchCount;

        Reason currentReason = request.currentReason;
        // If the ultimate challenger is defined that means that the request was ruled in favor of the challenger.
        bool applyPenalty = request.ultimateChallenger != address(0x0) && (currentReason == Reason.Duplicate || currentReason == Reason.DoesNotExist);
        for (uint i = lastProcessedVouch; i < endIndex; i++) {
            Submission storage voucher = submissions[request.vouches[i]];
            voucher.hasVouched = false;
            if (applyPenalty) {
                // Check the situation when vouching address is in the middle of reapplication process.
                if (voucher.status == Status.Vouching || voucher.status == Status.PendingRegistration)
                    voucher.requests[voucher.requests.length - 1].requesterLost = true;

                voucher.registered = false;
            }
        }
        request.lastProcessedVouch = uint32(endIndex);
    }

    /** @dev Reimburses contributions if no disputes were raised. If a dispute was raised, sends the fee stake rewards and reimbursements proportionally to the contributions made to the winner of a dispute.
     *  @param _beneficiary The address that made contributions to a request.
     *  @param _submissionID The address of the submission with the request from which to withdraw.
     *  @param _requestID The request from which to withdraw.
     *  @param _challengeID The ID of the challenge from which to withdraw.
     *  @param _round The round from which to withdraw.
     */
    function withdrawFeesAndRewards(address payable _beneficiary, address _submissionID, uint _requestID, uint _challengeID, uint _round) public {
        Submission storage submission = submissions[_submissionID];
        Request storage request = submission.requests[_requestID];
        Challenge storage challenge = request.challenges[_challengeID];
        Round storage round = challenge.rounds[_round];
        require(request.resolved, "Submission must be resolved");
        require(_beneficiary != address(0x0), "Beneficiary must not be empty");

        Party ruling = challenge.ruling;
        uint reward;
        // Reimburse the payment if the last round wasn't fully funded.
        // Note that the 0 round is always considered funded if there is a challenge. If there was no challenge the requester will be reimbursed with the subsequent condition, since the ruling will be Party.None.
        if (_round != 0 && _round == challenge.lastRoundID) {
            reward = round.contributions[_beneficiary][uint(Party.Requester)] + round.contributions[_beneficiary][uint(Party.Challenger)];
        } else if (ruling == Party.None) {
            uint totalFeesInRound = round.paidFees[uint(Party.Challenger)] + round.paidFees[uint(Party.Requester)];
            uint claimableFees = round.contributions[_beneficiary][uint(Party.Challenger)] + round.contributions[_beneficiary][uint(Party.Requester)];
            reward = totalFeesInRound > 0 ? claimableFees * round.feeRewards / totalFeesInRound : 0;
        } else {
            // Challenger, who ultimately wins, will be able to get the deposit of the requester, even if he didn't participate in the initial dispute.
            if (_round == 0 && _beneficiary == request.ultimateChallenger && _challengeID == 0) {
                reward = round.feeRewards;
                round.feeRewards = 0;
            // This condition will prevent claiming a reward, intended for the ultimate challenger.
            } else if (request.ultimateChallenger==address(0x0) || _challengeID!=0 || _round!=0) {
                uint paidFees = round.paidFees[uint(ruling)];
                reward = paidFees > 0
                    ? (round.contributions[_beneficiary][uint(ruling)] * round.feeRewards) / paidFees
                    : 0;
            }
        }
        round.contributions[_beneficiary][uint(Party.Requester)] = 0;
        round.contributions[_beneficiary][uint(Party.Challenger)] = 0;
        _beneficiary.send(reward);
    }

    /** @dev Give a ruling for a dispute. Can only be called by the arbitrator. TRUSTED.
     *  Accounts for the situation where the winner loses a case due to paying less appeal fees than expected.
     *  @param _disputeID ID of the dispute in the arbitrator contract.
     *  @param _ruling Ruling given by the arbitrator. Note that 0 is reserved for "Refused to arbitrate".
     */
    function rule(uint _disputeID, uint _ruling) public {
        Party resultRuling = Party(_ruling);
        DisputeData storage disputeData = arbitratorDisputeIDToDisputeData[msg.sender][_disputeID];
        address submissionID = disputeData.submissionID;
        uint challengeID = disputeData.challengeID;
        Submission storage submission = submissions[submissionID];

        Request storage request = submission.requests[submission.requests.length - 1];
        Challenge storage challenge = request.challenges[challengeID];
        Round storage round = challenge.rounds[challenge.lastRoundID];
        ArbitratorData storage arbitratorData = arbitratorDataList[request.arbitratorDataID];

        require(address(arbitratorData.arbitrator) == msg.sender);
        require(!request.resolved);

        // The ruling is inverted if the loser paid its fees.
        if (round.sideFunded == Party.Requester) // If one side paid its fees, the ruling is in its favor. Note that if the other side had also paid, an appeal would have been created.
            resultRuling = Party.Requester;
        else if (round.sideFunded == Party.Challenger)
            resultRuling = Party.Challenger;

        emit Ruling(IArbitrator(msg.sender), _disputeID, uint(resultRuling));
        executeRuling(submissionID, challengeID, resultRuling);
    }

    /** @dev Submit a reference to evidence. EVENT.
     *  @param _submissionID The address of the submission which the evidence is related to.
     *  @param _evidence A link to an evidence using its URI.
     */
    function submitEvidence(address _submissionID, string calldata _evidence) external {
        Submission storage submission = submissions[_submissionID];
        Request storage request = submission.requests[submission.requests.length - 1];
        ArbitratorData storage arbitratorData = arbitratorDataList[request.arbitratorDataID];

        emit Evidence(arbitratorData.arbitrator, submission.requests.length - 1 + uint(_submissionID), msg.sender, _evidence);
    }

    /* Internal */

    /** @dev Make a request to register/reapply the submission. Paying the full deposit right away is not required as it can be crowdfunded later.
     *  @param _submissionID The address of the submission.
     *  @param _evidence A link to evidence using its URI.
     */
    function requestRegistration(address _submissionID, string memory _evidence) internal {
        Submission storage submission = submissions[_submissionID];
        Request storage request = submission.requests[submission.requests.length++];

        uint arbitratorDataID = arbitratorDataList.length - 1;
        request.arbitratorDataID = uint16(arbitratorDataID);

        Round storage round = request.challenges[0].rounds[0];

        IArbitrator requestArbitrator = arbitratorDataList[arbitratorDataID].arbitrator;
        uint arbitrationCost = requestArbitrator.arbitrationCost(arbitratorDataList[arbitratorDataID].arbitratorExtraData);
        uint totalCost = arbitrationCost.addCap(submissionBaseDeposit);
        contribute(round, Party.Requester, msg.sender, msg.value, totalCost);

        if (round.paidFees[uint(Party.Requester)] >= totalCost)
            round.sideFunded = Party.Requester;

        if (bytes(_evidence).length > 0)
            emit Evidence(requestArbitrator, submission.requests.length - 1 + uint(_submissionID), msg.sender, _evidence);
    }

    /** @dev Returns the contribution value and remainder from available ETH and required amount.
     *  @param _available The amount of ETH available for the contribution.
     *  @param _requiredAmount The amount of ETH required for the contribution.
     *  @return taken The amount of ETH taken.
     *  @return remainder The amount of ETH left from the contribution.
     */
    function calculateContribution(uint _available, uint _requiredAmount)
        internal
        pure
        returns(uint taken, uint remainder)
    {
        if (_requiredAmount > _available)
            return (_available, 0);

        remainder = _available - _requiredAmount;
        return (_requiredAmount, remainder);
    }

    /** @dev Make a fee contribution.
     *  @param _round The round to contribute to.
     *  @param _side The side to contribute to.
     *  @param _contributor The contributor.
     *  @param _amount The amount contributed.
     *  @param _totalRequired The total amount required for this side.
     *  @return The amount of fees contributed.
     */
    function contribute(Round storage _round, Party _side, address payable _contributor, uint _amount, uint _totalRequired) internal returns (uint) {
        uint contribution;
        uint remainingETH;
        (contribution, remainingETH) = calculateContribution(_amount, _totalRequired.subCap(_round.paidFees[uint(_side)]));
        _round.contributions[_contributor][uint(_side)] += contribution;
        _round.paidFees[uint(_side)] += contribution;
        _round.feeRewards += contribution;

        if (remainingETH != 0)
            _contributor.send(remainingETH);

        return contribution;
    }

    /** @dev Execute the ruling of a dispute.
     *  @param _submissionID ID of the submission.
     *  @param _challengeID ID of the challenge, related to the dispute.
     *  @param _winner Ruling given by the arbitrator. Note that 0 is reserved for "Refused to arbitrate".
     */
    function executeRuling(address _submissionID, uint _challengeID, Party _winner) internal {
        Submission storage submission = submissions[_submissionID];
        uint requestID = submission.requests.length - 1;
        Status status = submission.status;

        Request storage request = submission.requests[requestID];
        uint nbParallelDisputes = request.nbParallelDisputes;

        Challenge storage challenge = request.challenges[_challengeID];

        if (status == Status.PendingRemoval) {
            if (_winner == Party.Requester)
                submission.registered = false;

            submission.status = Status.None;
            request.resolved = true;
        } else if (status == Status.PendingRegistration) {
            // For a registration request there can be more than one dispute.
            if (_winner == Party.Requester) {
                if (nbParallelDisputes == 1) {
                    // Check whether or not the requester won all of his previous disputes for current reason.
                    if (!request.requesterLost) {
                        if (request.usedReasons == FULL_REASONS_SET) {
                            // All reasons being used means the request can't be challenged again, so we can update its status.
                            submission.status = Status.None;
                            submission.registered = true;
                            submission.submissionTime = uint64(now);
                            request.resolved = true;
                        } else {
                            // Refresh the state of the request so it can be challenged again.
                            request.disputed = false;
                            request.challengePeriodStart = uint64(now);
                            request.currentReason = Reason.None;
                        }
                    } else {
                        submission.status = Status.None;
                        request.resolved = true;
                    }
                }
            // Challenger won or it’s a tie.
            } else {
                request.requesterLost = true;
                // Update the status of the submission if there is no more disputes left.
                if (nbParallelDisputes == 1) {
                    submission.status = Status.None;
                    request.resolved = true;
                }
                // Store the challenger that made the requester lose. Update the challenger if there is a duplicate with lower submission time, which is indicated by submission's index.
                if (_winner==Party.Challenger && (request.ultimateChallenger==address(0x0) || challenge.duplicateSubmissionIndex<request.currentDuplicateIndex)) {
                    request.ultimateChallenger = challenge.challenger;
                    request.currentDuplicateIndex = challenge.duplicateSubmissionIndex;
                }
            }
        }
        // Decrease the number of parallel disputes each time the dispute is resolved. Store the rulings of each dispute for correct distribution of rewards.
        request.nbParallelDisputes--;
        challenge.ruling = _winner;
        emit ChallengeResolved(_submissionID, requestID, _challengeID);
    }

    // ************************ //
    // *       Getters        * //
    // ************************ //

    /** @dev Returns true if the submission is registered and not expired.
     *  @param _submissionID The address of the submission.
     *  @return Whether the submission is registered or not.
     */
    function isRegistered(address _submissionID) external view returns (bool) {
        Submission storage submission = submissions[_submissionID];
        return submission.registered && now - submission.submissionTime <= submissionDuration;
    }

    /** @dev Gets the number of times the arbitrator data was updated.
     *  @return The number of arbitrator data updates.
     */
    function getArbitratorDataListCount() external view returns (uint) {
        return arbitratorDataList.length;
    }

    /** @dev Checks whether the duplicate address has been used in challenging the request or not.
     *  @param _submissionID The address of the submission to check.
     *  @param _requestID The request to check.
     *  @param _duplicateID The duplicate to check.
     *  @return Whether the duplicate has been used.
     */
    function checkRequestDuplicates(address _submissionID, uint _requestID, address _duplicateID) external view returns (bool) {
        Request storage request = submissions[_submissionID].requests[_requestID];
        return request.challengeDuplicates[_duplicateID];
    }

    /** @dev Gets the contributions made by a party for a given round of a given challenge of a request.
     *  @param _submissionID The address of the submission.
     *  @param _requestID The request to query.
     *  @param _challengeID the challenge to query.
     *  @param _round The round to query.
     *  @param _contributor The address of the contributor.
     *  @return The contributions.
     */
    function getContributions(
        address _submissionID,
        uint _requestID,
        uint _challengeID,
        uint _round,
        address _contributor
    ) external view returns(uint[3] memory contributions) {
        Request storage request = submissions[_submissionID].requests[_requestID];
        Challenge storage challenge = request.challenges[_challengeID];
        Round storage round = challenge.rounds[_round];
        contributions = round.contributions[_contributor];
    }

    /** @dev Returns the information of the submission. Includes length of requests array.
     *  @param _submissionID The address of the queried submission.
     *  @return The information of the submission.
     */
    function getSubmissionInfo(address _submissionID)
        external
        view
        returns (
            Status status,
            uint64 submissionTime,
            uint64 index,
            bool registered,
            bool hasVouched,
            uint numberOfRequests
        )
    {
        Submission storage submission = submissions[_submissionID];
        return (
            submission.status,
            submission.submissionTime,
            submission.index,
            submission.registered,
            submission.hasVouched,
            submission.requests.length
        );
    }

    /** @dev Gets the information of a particular challenge of the request.
     *  @param _submissionID The address of the queried submission.
     *  @param _requestID The request to query.
     *  @param _challengeID The challenge to query.
     *  @return The information of the challenge.
     */
    function getChallengeInfo(address _submissionID, uint _requestID, uint _challengeID)
        external
        view
        returns (
            uint16 lastRoundID,
            address challenger,
            uint disputeID,
            Party ruling,
            uint64 duplicateSubmissionIndex
        )
    {
        Request storage request = submissions[_submissionID].requests[_requestID];
        Challenge storage challenge = request.challenges[_challengeID];
        return (
            challenge.lastRoundID,
            challenge.challenger,
            challenge.disputeID,
            challenge.ruling,
            challenge.duplicateSubmissionIndex
        );
    }

    /** @dev Gets information of a request of a submission.
     *  @param _submissionID The address of the queried submission.
     *  @param _requestID The request to be queried.
     *  @return The request information.
     */
    function getRequestInfo(address _submissionID, uint _requestID)
        external
        view
        returns (
            bool disputed,
            bool resolved,
            bool requesterLost,
            Reason currentReason,
            uint16 nbParallelDisputes,
            uint16 lastChallengeID,
            uint16 arbitratorDataID,
            address payable requester,
            address payable ultimateChallenger,
            uint8 usedReasons
        )
    {
        Request storage request = submissions[_submissionID].requests[_requestID];
        return (
            request.disputed,
            request.resolved,
            request.requesterLost,
            request.currentReason,
            request.nbParallelDisputes,
            request.lastChallengeID,
            request.arbitratorDataID,
            request.requester,
            request.ultimateChallenger,
            request.usedReasons
        );
    }

    /** @dev Gets the number of vouches of a particular request.
     *  @param _submissionID The address of the queried submission.
     *  @param _requestID The request to query.
     *  @return The current number of vouches.
     */
    function getNumberOfVouches(address _submissionID, uint _requestID) external view returns (uint) {
        Request storage request = submissions[_submissionID].requests[_requestID];
        return request.vouches.length;
    }

    /** @dev Gets the information of a round of a request.
     *  @param _submissionID The address of the queried submission.
     *  @param _requestID The request to query.
     *  @param _challengeID The challenge to query.
     *  @param _round The round to query.
     *  @return The round information.
     */
    function getRoundInfo(address _submissionID, uint _requestID, uint _challengeID, uint _round)
        external
        view
        returns (
            bool appealed,
            uint[3] memory paidFees,
            Party sideFunded,
            uint feeRewards
        )
    {
        Request storage request = submissions[_submissionID].requests[_requestID];
        Challenge storage challenge = request.challenges[_challengeID];
        Round storage round = challenge.rounds[_round];
        appealed = _round < (challenge.lastRoundID);
        return (
            appealed,
            round.paidFees,
            round.sideFunded,
            round.feeRewards
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IArbitrator","name":"_arbitrator","type":"address"},{"internalType":"bytes","name":"_arbitratorExtraData","type":"bytes"},{"internalType":"string","name":"_registrationMetaEvidence","type":"string"},{"internalType":"string","name":"_clearingMetaEvidence","type":"string"},{"internalType":"uint256","name":"_submissionBaseDeposit","type":"uint256"},{"internalType":"uint64","name":"_submissionDuration","type":"uint64"},{"internalType":"uint64","name":"_renewalPeriodDuration","type":"uint64"},{"internalType":"uint64","name":"_challengePeriodDuration","type":"uint64"},{"internalType":"uint256[3]","name":"_multipliers","type":"uint256[3]"},{"internalType":"uint64","name":"_requiredNumberOfVouches","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_submissionID","type":"address"},{"indexed":false,"internalType":"uint256","name":"_requestID","type":"uint256"}],"name":"AddSubmission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_submissionID","type":"address"},{"indexed":true,"internalType":"uint256","name":"_challengeID","type":"uint256"},{"indexed":false,"internalType":"enum ProofOfHumanity.Party","name":"_party","type":"uint8"},{"indexed":true,"internalType":"address","name":"_contributor","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"AppealContribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IArbitrator","name":"_arbitrator","type":"address"},{"indexed":true,"internalType":"address","name":"_governor","type":"address"},{"indexed":false,"internalType":"uint256","name":"_submissionBaseDeposit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_submissionDuration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_challengePeriodDuration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_requiredNumberOfVouches","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sharedStakeMultiplier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_winnerStakeMultiplier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_loserStakeMultiplier","type":"uint256"}],"name":"ArbitratorComplete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_submissionID","type":"address"},{"indexed":true,"internalType":"uint256","name":"_requestID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_challengeID","type":"uint256"}],"name":"ChallengeResolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IArbitrator","name":"_arbitrator","type":"address"},{"indexed":true,"internalType":"uint256","name":"_disputeID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_metaEvidenceID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_evidenceGroupID","type":"uint256"}],"name":"Dispute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IArbitrator","name":"_arbitrator","type":"address"},{"indexed":true,"internalType":"uint256","name":"_evidenceGroupID","type":"uint256"},{"indexed":true,"internalType":"address","name":"_party","type":"address"},{"indexed":false,"internalType":"string","name":"_evidence","type":"string"}],"name":"Evidence","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_submissionID","type":"address"},{"indexed":true,"internalType":"uint256","name":"_challengeID","type":"uint256"},{"indexed":false,"internalType":"enum ProofOfHumanity.Party","name":"_side","type":"uint8"}],"name":"HasPaidAppealFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_metaEvidenceID","type":"uint256"},{"indexed":false,"internalType":"string","name":"_evidence","type":"string"}],"name":"MetaEvidence","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_submissionID","type":"address"},{"indexed":false,"internalType":"uint256","name":"_requestID","type":"uint256"}],"name":"ReapplySubmission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_requester","type":"address"},{"indexed":true,"internalType":"address","name":"_submissionID","type":"address"},{"indexed":false,"internalType":"uint256","name":"_requestID","type":"uint256"}],"name":"RemoveSubmission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IArbitrator","name":"_arbitrator","type":"address"},{"indexed":true,"internalType":"uint256","name":"_disputeID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_ruling","type":"uint256"}],"name":"Ruling","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_submissionID","type":"address"},{"indexed":true,"internalType":"uint256","name":"_requestID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_challengeID","type":"uint256"}],"name":"SubmissionChallenged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_submissionID","type":"address"},{"indexed":true,"internalType":"address","name":"_voucher","type":"address"}],"name":"VouchAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_submissionID","type":"address"},{"indexed":true,"internalType":"address","name":"_voucher","type":"address"}],"name":"VouchRemoved","type":"event"},{"constant":false,"inputs":[{"internalType":"string","name":"_evidence","type":"string"},{"internalType":"string","name":"_name","type":"string"}],"name":"addSubmission","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_submissionIDs","type":"address[]"},{"internalType":"string[]","name":"_evidence","type":"string[]"},{"internalType":"string[]","name":"_names","type":"string[]"}],"name":"addSubmissionManually","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"}],"name":"addVouch","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"arbitratorDataList","outputs":[{"internalType":"contract IArbitrator","name":"arbitrator","type":"address"},{"internalType":"uint96","name":"metaEvidenceUpdates","type":"uint96"},{"internalType":"bytes","name":"arbitratorExtraData","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"arbitratorDisputeIDToDisputeData","outputs":[{"internalType":"uint96","name":"challengeID","type":"uint96"},{"internalType":"address","name":"submissionID","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"challengePeriodDuration","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"},{"internalType":"enum ProofOfHumanity.Reason","name":"_reason","type":"uint8"},{"internalType":"address","name":"_duplicateID","type":"address"},{"internalType":"string","name":"_evidence","type":"string"}],"name":"challengeRequest","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IArbitrator","name":"_arbitrator","type":"address"},{"internalType":"bytes","name":"_arbitratorExtraData","type":"bytes"}],"name":"changeArbitrator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint64","name":"_submissionDuration","type":"uint64"},{"internalType":"uint64","name":"_renewalPeriodDuration","type":"uint64"},{"internalType":"uint64","name":"_challengePeriodDuration","type":"uint64"}],"name":"changeDurations","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_governor","type":"address"}],"name":"changeGovernor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_loserStakeMultiplier","type":"uint256"}],"name":"changeLoserStakeMultiplier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_registrationMetaEvidence","type":"string"},{"internalType":"string","name":"_clearingMetaEvidence","type":"string"}],"name":"changeMetaEvidence","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint64","name":"_requiredNumberOfVouches","type":"uint64"}],"name":"changeRequiredNumberOfVouches","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_sharedStakeMultiplier","type":"uint256"}],"name":"changeSharedStakeMultiplier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"},{"internalType":"address[]","name":"_vouches","type":"address[]"},{"internalType":"bytes[]","name":"_signatures","type":"bytes[]"},{"internalType":"uint256[]","name":"_expirationTimestamps","type":"uint256[]"}],"name":"changeStateToPending","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_submissionBaseDeposit","type":"uint256"}],"name":"changeSubmissionBaseDeposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_winnerStakeMultiplier","type":"uint256"}],"name":"changeWinnerStakeMultiplier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"},{"internalType":"uint256","name":"_requestID","type":"uint256"},{"internalType":"address","name":"_duplicateID","type":"address"}],"name":"checkRequestDuplicates","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"}],"name":"executeRequest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"},{"internalType":"uint256","name":"_challengeID","type":"uint256"},{"internalType":"enum ProofOfHumanity.Party","name":"_side","type":"uint8"}],"name":"fundAppeal","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"}],"name":"fundSubmission","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getArbitratorDataListCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"},{"internalType":"uint256","name":"_requestID","type":"uint256"},{"internalType":"uint256","name":"_challengeID","type":"uint256"}],"name":"getChallengeInfo","outputs":[{"internalType":"uint16","name":"lastRoundID","type":"uint16"},{"internalType":"address","name":"challenger","type":"address"},{"internalType":"uint256","name":"disputeID","type":"uint256"},{"internalType":"enum ProofOfHumanity.Party","name":"ruling","type":"uint8"},{"internalType":"uint64","name":"duplicateSubmissionIndex","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"},{"internalType":"uint256","name":"_requestID","type":"uint256"},{"internalType":"uint256","name":"_challengeID","type":"uint256"},{"internalType":"uint256","name":"_round","type":"uint256"},{"internalType":"address","name":"_contributor","type":"address"}],"name":"getContributions","outputs":[{"internalType":"uint256[3]","name":"contributions","type":"uint256[3]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"},{"internalType":"uint256","name":"_requestID","type":"uint256"}],"name":"getNumberOfVouches","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"},{"internalType":"uint256","name":"_requestID","type":"uint256"}],"name":"getRequestInfo","outputs":[{"internalType":"bool","name":"disputed","type":"bool"},{"internalType":"bool","name":"resolved","type":"bool"},{"internalType":"bool","name":"requesterLost","type":"bool"},{"internalType":"enum ProofOfHumanity.Reason","name":"currentReason","type":"uint8"},{"internalType":"uint16","name":"nbParallelDisputes","type":"uint16"},{"internalType":"uint16","name":"lastChallengeID","type":"uint16"},{"internalType":"uint16","name":"arbitratorDataID","type":"uint16"},{"internalType":"address payable","name":"requester","type":"address"},{"internalType":"address payable","name":"ultimateChallenger","type":"address"},{"internalType":"uint8","name":"usedReasons","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"},{"internalType":"uint256","name":"_requestID","type":"uint256"},{"internalType":"uint256","name":"_challengeID","type":"uint256"},{"internalType":"uint256","name":"_round","type":"uint256"}],"name":"getRoundInfo","outputs":[{"internalType":"bool","name":"appealed","type":"bool"},{"internalType":"uint256[3]","name":"paidFees","type":"uint256[3]"},{"internalType":"enum ProofOfHumanity.Party","name":"sideFunded","type":"uint8"},{"internalType":"uint256","name":"feeRewards","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"}],"name":"getSubmissionInfo","outputs":[{"internalType":"enum ProofOfHumanity.Status","name":"status","type":"uint8"},{"internalType":"uint64","name":"submissionTime","type":"uint64"},{"internalType":"uint64","name":"index","type":"uint64"},{"internalType":"bool","name":"registered","type":"bool"},{"internalType":"bool","name":"hasVouched","type":"bool"},{"internalType":"uint256","name":"numberOfRequests","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"}],"name":"isRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"loserStakeMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"},{"internalType":"uint256","name":"_requestID","type":"uint256"},{"internalType":"uint256","name":"_iterations","type":"uint256"}],"name":"processVouches","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_evidence","type":"string"},{"internalType":"string","name":"_name","type":"string"}],"name":"reapplySubmission","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"},{"internalType":"string","name":"_evidence","type":"string"}],"name":"removeSubmission","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"}],"name":"removeSubmissionManually","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"}],"name":"removeVouch","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"renewalPeriodDuration","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"requiredNumberOfVouches","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_disputeID","type":"uint256"},{"internalType":"uint256","name":"_ruling","type":"uint256"}],"name":"rule","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sharedStakeMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"submissionBaseDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"submissionCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"submissionDuration","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_submissionID","type":"address"},{"internalType":"string","name":"_evidence","type":"string"}],"name":"submitEvidence","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"vouches","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"winnerStakeMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_beneficiary","type":"address"},{"internalType":"address","name":"_submissionID","type":"address"},{"internalType":"uint256","name":"_requestID","type":"uint256"},{"internalType":"uint256","name":"_challengeID","type":"uint256"},{"internalType":"uint256","name":"_round","type":"uint256"}],"name":"withdrawFeesAndRewards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawSubmission","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162006311380380620063118339810160408190526200003491620004af565b6000600080516020620062f18339815191528960405162000056919062000760565b60405180910390a26001600080516020620062f18339815191528860405162000080919062000760565b60405180910390a260018054336001600160a01b03199091161781556002879055600380548451600455602085015160055560408501516006556001600160401b0319166001600160401b0388811691909117600160401b600160801b031916680100000000000000008883160217600160801b600160c01b031916600160801b87831602176001600160c01b0316600160c01b918516919091021790556008805460009262000134908390830162000260565b815481106200013f57fe5b60009182526020918290206002919091020180546001600160a01b0319166001600160a01b038e161781558b5190925062000183916001840191908d019062000294565b50337fe313403816674ac13a5fd6524fafc793584c317c3c947825b71a753b0c155b208c8989888789600060200201518a600160200201518b60026020020151604051620001d9989796959493929190620006d9565b60405180910390a26040517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8669046908290620002159062000686565b6040519081900381206200023192918490309060200162000693565b6040516020818303038152906040528051906020012060008190555050505050505050505050505050620008a2565b8154818355818111156200028f576002028160020283600052602060002091820191016200028f919062000319565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002d757805160ff191683800117855562000307565b8280016001018555821562000307579182015b8281111562000307578251825591602001919060010190620002ea565b50620003159291506200034a565b5090565b6200034791905b80821115620003155760008082556200033d600183018262000367565b5060020162000320565b90565b6200034791905b8082111562000315576000815560010162000351565b50805460018160011615610100020316600290046000825580601f106200038f5750620003af565b601f016020900490600052602060002090810190620003af91906200034a565b50565b600082601f830112620003c457600080fd5b6003620003db620003d582620007a1565b6200077a565b91508183856020840282011115620003f257600080fd5b60005b838110156200042257816200040b888262000495565b8452506020928301929190910190600101620003f5565b5050505092915050565b600082601f8301126200043e57600080fd5b81516200044f620003d582620007bf565b915080825260208301602083018583830111156200046c57600080fd5b6200047983828462000838565b50505092915050565b80516200048f8162000875565b92915050565b80516200048f816200088c565b80516200048f8162000897565b6000806000806000806000806000806101808b8d031215620004d057600080fd5b6000620004de8d8d62000482565b9a505060208b01516001600160401b03811115620004fb57600080fd5b620005098d828e016200042c565b99505060408b01516001600160401b038111156200052657600080fd5b620005348d828e016200042c565b98505060608b01516001600160401b038111156200055157600080fd5b6200055f8d828e016200042c565b9750506080620005728d828e0162000495565b96505060a0620005858d828e01620004a2565b95505060c0620005988d828e01620004a2565b94505060e0620005ab8d828e01620004a2565b935050610100620005bf8d828e01620003b2565b925050610160620005d38d828e01620004a2565b9150509295989b9194979a5092959850565b620005f081620007f9565b82525050565b620005f08162000347565b620005f08162000806565b60006200061982620007e7565b620006258185620007eb565b93506200063781856020860162000838565b62000642816200086b565b9093019392505050565b60006200065b601183620007f4565b7050726f6f66206f662048756d616e69747960781b815260110192915050565b620005f0816200082b565b60006200048f826200064c565b60808101620006a38287620005f6565b620006b26020830186620005f6565b620006c16040830185620005f6565b620006d06060830184620005e5565b95945050505050565b6101008101620006ea828b62000601565b620006f9602083018a620005f6565b6200070860408301896200067b565b6200071760608301886200067b565b6200072660808301876200067b565b6200073560a0830186620005f6565b6200074460c0830185620005f6565b6200075360e0830184620005f6565b9998505050505050505050565b602080825281016200077381846200060c565b9392505050565b6040518181016001600160401b03811182821017156200079957600080fd5b604052919050565b60006001600160401b03821115620007b857600080fd5b5060200290565b60006001600160401b03821115620007d657600080fd5b506020601f91909101601f19160190565b5190565b90815260200190565b919050565b60006200048f8262000813565b60006200048f82620007f9565b6001600160a01b031690565b6001600160401b031690565b60006200048f826200081f565b60005b83811015620008555781810151838201526020016200083b565b8381111562000865576000848401525b50505050565b601f01601f191690565b620008808162000806565b8114620003af57600080fd5b620008808162000347565b62000880816200081f565b615a3f80620008b26000396000f3fe6080604052600436106102925760003560e01c806390d7c13c1161015a578063ce52b9f4116100c1578063e4c0aaf41161007a578063e4c0aaf4146107cd578063ec0e71ba146107ed578063f40e0aed1461081c578063f4934cdb1461082f578063f633c29314610842578063f65ab1be1461085757610292565b8063ce52b9f414610706578063d64240de1461071b578063d706be311461074c578063d7e9f1781461076c578063dd254cd31461077f578063deb8f707146107ad57610292565b8063a84dc70e11610113578063a84dc70e14610641578063adc7faba14610671578063b4dfe93d14610691578063ba7079ca146106b1578063bb0b86ff146106d1578063c3c5a547146106e657610292565b806390d7c13c1461058757806392239dff1461059c57806397973043146105bc5780639a72e0b3146105ee578063a27456bb1461060e578063a6c6ecc91461062157610292565b806341658341116101fe5780636e112409116101b75780636e112409146104d25780636e98762d1461050857806376c23ff1146105285780637b9433831461053d57806384d1c91a14610552578063876c63d41461057257610292565b806341658341146104375780634690d55a1461044c5780635a9ef3411461045f5780635bb5e55b1461047257806361b9054114610492578063649a08bf146104b257610292565b80632d9489c6116102505780632d9489c6146103755780632e8485061461038a578063311a6c56146103aa57806332fe596f146103ca57806333e5d047146103ea5780633a8363c21461040a57610292565b806282a36d146102975780630b337be6146102c25780630c340a24146102ef57806312ce3525146103115780631d5120851461033357806326bafe5f14610355575b600080fd5b3480156102a357600080fd5b506102ac610877565b6040516102b99190615822565b60405180910390f35b3480156102ce57600080fd5b506102e26102dd366004614635565b61088d565b6040516102b991906153cf565b3480156102fb57600080fd5b506103046108ad565b6040516102b991906153b3565b34801561031d57600080fd5b5061033161032c366004614aee565b6108bc565b005b34801561033f57600080fd5b506103486108f4565b6040516102b991906157f4565b34801561036157600080fd5b50610331610370366004614b97565b6108fa565b34801561038157600080fd5b506102ac6109c6565b34801561039657600080fd5b506102e26103a5366004614825565b6109dc565b3480156103b657600080fd5b506103316103c5366004614b2a565b610a3d565b3480156103d657600080fd5b506103316103e53660046145a2565b610be6565b3480156103f657600080fd5b50610331610405366004614aee565b610c3e565b34801561041657600080fd5b5061042a610425366004614959565b610c6d565b6040516102b991906153c1565b34801561044357600080fd5b50610348610d1a565b61033161045a366004614a80565b610d20565b61033161046d366004614a80565b610e3c565b34801561047e57600080fd5b5061033161048d3660046147a0565b610f8d565b34801561049e57600080fd5b506103316104ad3660046149c1565b611053565b3480156104be57600080fd5b506103316104cd3660046148b5565b6112e3565b3480156104de57600080fd5b506104f26104ed3660046147f5565b6114d3565b6040516102b99a99989796959493929190615412565b34801561051457600080fd5b506103316105233660046145a2565b6115aa565b34801561053457600080fd5b50610348611737565b34801561054957600080fd5b5061034861173d565b34801561055e57600080fd5b5061033161056d3660046145a2565b611743565b34801561057e57600080fd5b506102ac611798565b34801561059357600080fd5b506103486117ae565b3480156105a857600080fd5b506103316105b7366004614aee565b6117b5565b3480156105c857600080fd5b506105dc6105d73660046145a2565b6117e4565b6040516102b99695949392919061556b565b3480156105fa57600080fd5b506103316106093660046145c0565b61183b565b61033161061c3660046145a2565b611acb565b34801561062d57600080fd5b5061033161063c3660046145a2565b611c59565b34801561064d57600080fd5b5061066161065c3660046148f8565b611ce8565b6040516102b994939291906153dd565b34801561067d57600080fd5b5061033161068c366004614aee565b611dbb565b34801561069d57600080fd5b506103316106ac36600461466f565b611dea565b3480156106bd57600080fd5b506103316106cc366004614a5f565b612459565b3480156106dd57600080fd5b50610348612591565b3480156106f257600080fd5b506102e26107013660046145a2565b612597565b34801561071257600080fd5b506103316125e9565b34801561072757600080fd5b5061073b6107363660046148b5565b612685565b6040516102b99594939291906157a8565b34801561075857600080fd5b50610331610767366004614a80565b612728565b61033161077a366004614872565b612951565b34801561078b57600080fd5b5061079f61079a3660046147f5565b612f15565b6040516102b992919061583e565b3480156107b957600080fd5b506103486107c83660046147f5565b612f4d565b3480156107d957600080fd5b506103316107e83660046145a2565b612f95565b3480156107f957600080fd5b5061080d610808366004614aee565b612fe1565b6040516102b993929190615515565b61033161082a366004614723565b6130b2565b61033161083d3660046147a0565b613947565b34801561084e57600080fd5b506102ac613c83565b34801561086357600080fd5b50610331610872366004614b79565b613c92565b600354600160801b90046001600160401b031681565b600a60209081526000928352604080842090915290825290205460ff1681565b6001546001600160a01b031681565b6001546001600160a01b031633146108ef5760405162461bcd60e51b81526004016108e690615748565b60405180910390fd5b600455565b60065481565b6001546001600160a01b031633146109245760405162461bcd60e51b81526004016108e690615748565b6001600160401b03808416906109429083168463ffffffff613ce416565b6001600160401b0316106109685760405162461bcd60e51b81526004016108e690615638565b6003805467ffffffffffffffff19166001600160401b03948516176fffffffffffffffff00000000000000001916600160401b938516939093029290921767ffffffffffffffff60801b1916600160801b9190931602919091179055565b600354600160c01b90046001600160401b031681565b6001600160a01b0383166000908152600960205260408120600101805482919085908110610a0657fe5b600091825260208083206001600160a01b03871684526005600690930201919091019052604090205460ff169150505b9392505050565b6000816002811115610a4b57fe5b336000908152600b6020908152604080832087845282528083208054600160601b81046001600160a01b03168086526009909452918420600181018054969750919593946001600160601b0390931693909291906000198101908110610aad57fe5b60009182526020808320868452600460069093020191820181526040808420600181015461ffff6101009091048116865260028201909352908420835460088054959750929591949193600160381b90910416908110610b0957fe5b6000918252602090912060029091020180549091506001600160a01b03163314610b3257600080fd5b8354610100900460ff1615610b4657600080fd5b6001600383015460ff166002811115610b5b57fe5b1415610b6a5760019850610b8a565b6002600383015460ff166002811115610b7f57fe5b1415610b8a57600298505b8a337f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222768b6002811115610bb957fe5b604051610bc691906157f4565b60405180910390a3610bd987878b613d14565b5050505050505050505050565b336000818152600a602090815260408083206001600160a01b0386168085529252808320805460ff191660011790555190917fc5482a4357210d662eeea6fa4589e76e47bdb84517a3b9da4f8b7576ae00170191a350565b6001546001600160a01b03163314610c685760405162461bcd60e51b81526004016108e690615748565b600255565b610c75614377565b6001600160a01b0386166000908152600960205260408120600101805487908110610c9c57fe5b6000918252602080832088845260069290920290910160048101825260408084208885526002810184528185206001600160a01b03891686526005810190945293819020815160608101928390529295509060039082845b815481526020019060010190808311610cf4575050505050935050505095945050505050565b60045481565b3360009081526009602052604090208054610100900460ff16158015610d5557506000815460ff166003811115610d5357fe5b145b610d715760405162461bcd60e51b81526004016108e690615708565b6001810154610dac576007805482546001600160401b03909116600160581b0267ffffffffffffffff60581b19909116178255805460010190555b805460ff19166001908117825581015460405133917f803727a67d35270dc2c090dc4f9cba1f9818a7200e65c2087eca187851fd6b1991610ded91906157f4565b60405180910390a2610e353386868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061400992505050565b5050505050565b3360009081526009602052604090208054610100900460ff168015610e7057506000815460ff166003811115610e6e57fe5b145b610e8c5760405162461bcd60e51b81526004016108e690615708565b600354600090610ed190610eb9906001600160401b0380821691600160401b90041663ffffffff6141fc16565b8354630100000090046001600160401b031690613ce4565b6001600160401b0316905080421015610efc5760405162461bcd60e51b81526004016108e6906156b8565b815460ff19166001908117835582015460405133917ff6cfccc832db8edf362f395f01d696c7da2db840d97eb1ec1ac44c980143990e91610f3d91906157f4565b60405180910390a2610f853387878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061400992505050565b505050505050565b6001600160a01b03831660009081526009602052604081206001810180549192916000198101908110610fbc57fe5b90600052602060002090600602019050600060088260000160079054906101000a900461ffff1661ffff1681548110610ff157fe5b600091825260209091206001850154600290920201805460405191935033926000196001600160a01b038b811690920101929116906000805160206159dd83398151915290611043908a908a906155c5565b60405180910390a4505050505050565b6001546001600160a01b0316331461107d5760405162461bcd60e51b81526004016108e690615748565b6007546008546000190160005b878110156112d6576000600960008b8b858181106110a457fe5b90506020020160206110b991908101906145a2565b6001600160a01b0316815260208101919091526040016000206001810154909150156110f75760405162461bcd60e51b81526004016108e690615728565b805467ffffffffffffffff60581b1916600160581b6001600160401b0386160217815560018082018054958201956000926111359083908301614395565b8154811061113f57fe5b600091825260208220845461010061ff001991821681176affffffffffffffff00000019166301000000426001600160401b031602178755600693909302909101805461ffff60381b1916600160381b61ffff8a160217909116909117815591508989858181106111ac57fe5b602002820190508035601e19368490030181126111c857600080fd5b909101602081019150356001600160401b038111156111e657600080fd5b368190038213156111f657600080fd5b905011156112cc57338b8b8581811061120b57fe5b905060200201602061122091908101906145a2565b6001600160a01b03166008868154811061123657fe5b60009182526020909120600290910201546001600160a01b03166000805160206159dd8339815191528c8c8881811061126b57fe5b602002820190508035601e193684900301811261128757600080fd5b909101602081019150356001600160401b038111156112a557600080fd5b368190038213156112b557600080fd5b6040516112c39291906155c5565b60405180910390a45b505060010161108a565b5050600755505050505050565b6001600160a01b03831660009081526009602052604081206001810180549192918590811061130e57fe5b600091825260209091206006909102018054909150610100900460ff166113475760405162461bcd60e51b81526004016108e6906156f8565b805463ffffffff600160581b90910481169060009061136a908690849061422916565b60038401549091508082111561137e578091505b83546002850154630100000090910460ff16906000906001600160a01b0316158015906113cb575060038260048111156113b457fe5b14806113cb575060048260048111156113c957fe5b145b9050845b848110156114a5576000600960008960030184815481106113ec57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020805462ff0000191681559050821561149c576001815460ff16600381111561143457fe5b148061144f57506002815460ff16600381111561144d57fe5b145b156114925760018181018054600019810190811061146957fe5b600091825260209091206006909102018054911515620100000262ff0000199092169190911790555b805461ff00191681555b506001016113cf565b5050845463ffffffff909316600160581b0263ffffffff60581b199093169290921790935550505050505050565b6000806000806000806000806000806000600960008e6001600160a01b03166001600160a01b031681526020019081526020016000206001018c8154811061151757fe5b600091825260209091206006909102018054600182015460029092015460ff8083169e50610100830481169d5062010000830481169c506301000000830481169b5061ffff65010000000000840481169b50600160481b840481169a50600160381b84041698506001600160a01b039384169750921694506401000000009004169150509295989b9194979a5092959850565b6001600160a01b03811660009081526009602052604081206001810180549192600019830192909190839081106115dd57fe5b600091825260209091206003546006909202018054909250600160801b9091046001600160401b03908116600160b81b909204164203116116305760405162461bcd60e51b81526004016108e6906156a8565b805460ff16156116525760405162461bcd60e51b81526004016108e690615718565b60006002845460ff16600381111561166657fe5b14156116b157815462010000900460ff166116aa57835461010061ff0019909116176affffffffffffffff00000019166301000000426001600160401b0316021784555b50836116fe565b6003845460ff1660038111156116c357fe5b14156116e65750825461ff001916835560018101546001600160a01b03166116fe565b60405162461bcd60e51b81526004016108e690615648565b835460ff19168455815461ff001916610100178255600382015415611729576117298584600a6112e3565b610e3581868560008061183b565b60075481565b60055481565b336000818152600a602090815260408083206001600160a01b0386168085529252808320805460ff191690555190917fd6f782ad61ba30c1b39b77f1bf37061e68733360288a441e70d08c0a91b0cbc591a350565b600354600160401b90046001600160401b031681565b6008545b90565b6001546001600160a01b031633146117df5760405162461bcd60e51b81526004016108e690615748565b600655565b6001600160a01b03166000908152600960205260409020805460019091015460ff808316936001600160401b0363010000008504811694600160581b81049091169361010082048416936201000090920490911691565b6001600160a01b03841660009081526009602052604081206001810180549192918690811061186657fe5b600091825260208083208784526004600690930201918201815260408084208785526002810190925290922081549193509060ff610100909104166118bd5760405162461bcd60e51b81526004016108e6906156f8565b6001600160a01b0389166118e35760405162461bcd60e51b81526004016108e690615668565b600182015460ff166000861580159061190857506001840154610100900461ffff1687145b1561193957506001600160a01b038a1660009081526005830160205260409020600281015460019091015401611a7f565b600082600281111561194757fe5b14156119a6576001808401546002808601546001600160a01b038f1660009081526005880160205260409020938401549390910154910191018161198c57600061199d565b81856004015482028161199b57fe5b045b92505050611a7f565b861580156119c3575060028501546001600160a01b038c81169116145b80156119cd575087155b156119e357506004820180546000909155611a7f565b60028501546001600160a01b031615806119fc57508715155b80611a0657508615155b15611a7f57600083836002811115611a1a57fe5b60038110611a2457fe5b0154905060008111611a37576000611a7b565b60048401546001600160a01b038d1660009081526005860160205260409020829190856002811115611a6557fe5b60038110611a6f57fe5b01540281611a7957fe5b045b9150505b6001600160a01b038b16600081815260058501602052604080822060018101839055600201829055516108fc84150291849190818181858888f150505050505050505050505050505050565b6001600160a01b03811660009081526009602052604090206001815460ff166003811115611af557fe5b14611b125760405162461bcd60e51b81526004016108e690615708565b600181018054600091906000198101908110611b2a57fe5b600091825260208083208380526006929092029091016004810182526040808420600281019093528320815460088054939650939491939192600160381b90910461ffff16908110611b7857fe5b600091825260208220600290910201805460405163f7434ea960e01b81529193506001600160a01b03169063f7434ea990611bba906001860190600401615504565b60206040518083038186803b158015611bd257600080fd5b505afa158015611be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c0a9190810190614b0c565b90506000611c236002548361422990919063ffffffff16565b9050611c3384600133348561423e565b5080846001015410611c4f5760038401805460ff191660011790555b5050505050505050565b6001546001600160a01b03163314611c835760405162461bcd60e51b81526004016108e690615748565b6001600160a01b03811660009081526009602052604090208054610100900460ff168015611cc057506000815460ff166003811115611cbe57fe5b145b611cdc5760405162461bcd60e51b81526004016108e690615708565b805461ff001916905550565b6000611cf2614377565b6001600160a01b038616600090815260096020526040812060010180548291829189908110611d1d57fe5b600091825260208083208a84526006929092029091016004818101835260408085208b865260028101909452938490206001840154600380830154938301548751606081019889905261010090930461ffff168e109c50949750949591948b94869460ff1693909291859182845b815481526020019060010190808311611d8b57505050505092509650965096509650505050945094509450949050565b6001546001600160a01b03163314611de55760405162461bcd60e51b81526004016108e690615748565b600555565b6001600160a01b03871660009081526009602052604090206001815460ff166003811115611e1457fe5b14611e315760405162461bcd60e51b81526004016108e690615708565b600181018054600091906000198101908110611e4957fe5b60009182526020808320838052600460069093020191820181526040808420600281019092529092209092506001600382015460ff166002811115611e8a57fe5b14611ea75760405162461bcd60e51b81526004016108e690615688565b50506003546001600160401b0316420361190160f01b60005b8781108015611ee557506003805490850154600160c01b9091046001600160401b0316115b15612206576000807fa9e3fa1df5c3dbef1e9cfb610fa780355a0b5e0acb0fa8249777ec973ca789dc8e8a8a86818110611f1b57fe5b90506020020135604051602001611f34939291906154a7565b60405160208183030381529060405280519060200120905060008460005483604051602001611f659392919061537c565b60405160208183030381529060405280519060200120905060608c8c86818110611f8b57fe5b602002820190508035601e1936849003018112611fa757600080fd5b909101602081019150356001600160401b03811115611fc557600080fd5b36819003821315611fd557600080fd5b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506020850151604086015160608701519697509095909450901a915050601b81101561202e57601b015b8060ff16601b148061204357508060ff16601c145b61205f5760405162461bcd60e51b81526004016108e690615678565b6001858285856040516000815260200160405260405161208294939291906154cf565b6020604051602081039080840390855afa1580156120a4573d6000803e3d6000fd5b505060408051601f1901516001600160a01b03811660009081526009602052919091208054919950975062010000900460ff1615955050841593506120f39250505057508054610100900460ff165b801561211057508054630100000090046001600160401b03168511155b801561212d575088888481811061212357fe5b9050602002013542105b801561214b5750816001600160a01b03168e6001600160a01b031614155b156121fc57856003018290806001815401808255809150509060018203906000526020600020016000909192909190916101000a8154816001600160a01b0302191690836001600160a01b031602179055505060018160000160026101000a81548160ff021916908315150217905550816001600160a01b03168e6001600160a01b03167fc5482a4357210d662eeea6fa4589e76e47bdb84517a3b9da4f8b7576ae00170160405160405180910390a35b5050600101611ec0565b5060005b898110801561222f57506003805490850154600160c01b9091046001600160401b0316115b156123e5576000600960008d8d8581811061224657fe5b905060200201602061225b91908101906145a2565b6001600160a01b031681526020810191909152604001600020805490915062010000900460ff1615801561229557508054610100900460ff165b80156122b257508054630100000090046001600160401b03168411155b80156123305750600a60008d8d858181106122c957fe5b90506020020160206122de91908101906145a2565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008e6001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900460ff165b801561236e57508b8b8381811061234357fe5b905060200201602061235891908101906145a2565b6001600160a01b03168d6001600160a01b031614155b156123dc57846003018c8c8481811061238357fe5b905060200201602061239891908101906145a2565b81546001810183556000928352602090922090910180546001600160a01b039092166001600160a01b0319909216919091179055805462ff00001916620100001781555b5060010161220a565b506003805490840154600160c01b9091046001600160401b0316111561241d5760405162461bcd60e51b81526004016108e690615618565b5050815460ff191660021790915580546001600160401b034216600160b81b0267ffffffffffffffff60b81b1990911617905550505050505050565b6001546001600160a01b031633146124835760405162461bcd60e51b81526004016108e690615748565b6008805460009190600019810190811061249957fe5b9060005260206000209060020201905060086040518060600160405280866001600160a01b031681526020018360000160149054906101000a90046001600160601b03166001600160601b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250508354600181810180875595835260209283902085516002909302018054848701516001600160601b0316600160a01b026001600160a01b039485166001600160a01b03199092169190911790931692909217825560408501518051929450611c4f93918501929101906143c6565b60025481565b6001600160a01b03811660009081526009602052604081208054610100900460ff1680156125e0575060035481546001600160401b039182166301000000909104909116420311155b9150505b919050565b3360009081526009602052604090206001815460ff16600381111561260a57fe5b146126275760405162461bcd60e51b81526004016108e690615708565b60018101805460009190600019810190811061263f57fe5b600091825260208220845460ff1916855560069190910201805461ff00191661010017815560018401549092506126819133918291600019909101908061183b565b5050565b600080600080600080600960008a6001600160a01b03166001600160a01b0316815260200190815260200160002060010188815481106126c157fe5b600091825260208083209983526006919091029098016004019097525050604090942060018101549054610100820461ffff1698600160581b83046001600160a01b0316985090965060ff8216955063010000009091046001600160401b03169350915050565b6001546001600160a01b031633146127525760405162461bcd60e51b81526004016108e690615748565b6008805460009190600019810190811061276857fe5b60009182526020918290206002918202018054604080516060810182526001600160a01b0383168152600160a01b9092046001600160601b03908116600190810191821684880152808501805484516101009382161593909302600019011696909604601f81018890048802820188018452808252949750909560089593949285019391929083018282801561283f5780601f106128145761010080835404028352916020019161283f565b820191906000526020600020905b81548152906001019060200180831161282257829003601f168201915b50505091909252505081546001818101808555600094855260209485902084516002909402018054868601516001600160601b0316600160a01b026001600160a01b039586166001600160a01b0319909216919091179094169390931783556040840151805191956128b6938501929101906143c6565b50505050806002026001600160601b03167f61606860eb6c87306811e2695215385101daab53bd6ab4e9f9049aead9363c7d87876040516128f89291906155c5565b60405180910390a2806002026001016001600160601b03167f61606860eb6c87306811e2695215385101daab53bd6ab4e9f9049aead9363c7d85856040516129419291906155c5565b60405180910390a2505050505050565b600081600281111561295f57fe5b141561296a57600080fd5b6001600160a01b03831660009081526009602052604090206002815460ff16600381111561299457fe5b14806129af57506003815460ff1660038111156129ad57fe5b145b6129cb5760405162461bcd60e51b81526004016108e690615708565b6001810180546000919060001981019081106129e357fe5b60009182526020909120600690910201805490915060ff16612a175760405162461bcd60e51b81526004016108e6906156d8565b8054600160481b900461ffff168410612a425760405162461bcd60e51b81526004016108e6906155f8565b600084815260048201602052604081208254600880549293929091600160381b900461ffff16908110612a7157fe5b6000918252602082206002909102018054845460405163afe15cfb60e01b815292945083926001600160a01b039092169163afe15cfb91612ab4916004016157f4565b604080518083038186803b158015612acb57600080fd5b505afa158015612adf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b039190810190614b49565b91509150814210158015612b1657508042105b612b325760405162461bcd60e51b81526004016108e690615608565b82548454604051631c3db16d60e01b815260009283926001600160a01b0390911691631c3db16d91612b66916004016157f4565b60206040518083038186803b158015612b7e57600080fd5b505afa158015612b92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612bb69190810190614b0c565b6002811115612bc157fe5b9050886002811115612bcf57fe5b816002811115612bdb57fe5b1415612beb576005549150612c34565b6000816002811115612bf957fe5b1415612c09576004549150612c34565b600654915060028484030484420310612c345760405162461bcd60e51b81526004016108e690615768565b506001850154610100900461ffff166000908152600280870160205260409091206003810154909160ff90911690811115612c6b57fe5b896002811115612c7757fe5b1415612c955760405162461bcd60e51b81526004016108e690615738565b8454865460405163791f8b7360e11b81526000926001600160a01b03169163f23f16e691612ccb919060018b0190600401615802565b60206040518083038186803b158015612ce357600080fd5b505afa158015612cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d1b9190810190614b0c565b90506000612d4b612710612d35848763ffffffff61431616565b81612d3c57fe5b8491900463ffffffff61422916565b90506000612d5c848d33348661423e565b9050336001600160a01b03168d8f6001600160a01b03167f9294febeba62e3f0e89187b59ba1235acc7fdbdebf15d6ede13c7b43adfa66dc8f85604051612da4929190615550565b60405180910390a481848d6002811115612dba57fe5b60038110612dc457fe5b015410612f05576000600385015460ff166002811115612de057fe5b1415612e0b576003840180548d919060ff19166001836002811115612e0157fe5b0217905550612ec2565b8754895460405163093225f160e31b81526001600160a01b03909216916349912f88918691612e42919060018e0190600401615802565b6000604051808303818588803b158015612e5b57600080fd5b505af1158015612e6f573d6000803e3d6000fd5b5050506001808c01805461ffff61010080830482169094011690920262ffff001990921691909117905550506004840154612eb0908463ffffffff61434016565b600485015560038401805460ff191690555b8c8e6001600160a01b03167f642c5385391e218917cf658cc1365fdffc24183646b08706ed51281972d1dc808e604051612efc9190615542565b60405180910390a35b5050505050505050505050505050565b600b6020908152600092835260408084209091529082529020546001600160601b03811690600160601b90046001600160a01b031682565b6001600160a01b0382166000908152600960205260408120600101805482919084908110612f7757fe5b60009182526020909120600360069092020101549150505b92915050565b6001546001600160a01b03163314612fbf5760405162461bcd60e51b81526004016108e690615748565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60088181548110612fee57fe5b60009182526020918290206002918202018054600180830180546040805161010094831615949094026000190190911695909504601f81018790048702830187019095528482526001600160a01b0383169650600160a01b9092046001600160601b031694929390928301828280156130a85780601f1061307d576101008083540402835291602001916130a8565b820191906000526020600020905b81548152906001019060200180831161308b57829003601f168201915b5050505050905083565b6001600160a01b03851660009081526009602052604090206002815460ff1660038111156130dc57fe5b14156131135760008560048111156130f057fe5b141561310e5760405162461bcd60e51b81526004016108e690615628565b61316e565b6003815460ff16600381111561312557fe5b141561315657600085600481111561313957fe5b1461310e5760405162461bcd60e51b81526004016108e690615778565b60405162461bcd60e51b81526004016108e690615708565b60018101805460009190600019810190811061318657fe5b600091825260209091206003546006909202018054909250600160801b9091046001600160401b03908116600160b81b90920416420311156131da5760405162461bcd60e51b81526004016108e6906156c8565b8054600160481b810461ffff1660009081526004830160205260409020906301000000900460ff16600388600481111561321057fe5b141561339a576001600160a01b03871660009081526009602052604081205460ff16600381111561323d57fe5b118061326657506001600160a01b038716600090815260096020526040902054610100900460ff165b6132825760405162461bcd60e51b81526004016108e690615758565b866001600160a01b0316896001600160a01b031614156132b45760405162461bcd60e51b81526004016108e690615798565b60038160048111156132c257fe5b14806132d9575060008160048111156132d757fe5b145b6132f55760405162461bcd60e51b81526004016108e6906156e8565b6001600160a01b038716600090815260058401602052604090205460ff16156133305760405162461bcd60e51b81526004016108e690615658565b6001600160a01b038716600090815260058401602090815260408083208054600160ff19909116811790915560099092529091205490830180546affffffffffffffff0000001916600160581b9092046001600160401b03166301000000029190911790556133bc565b825460ff16156133bc5760405162461bcd60e51b81526004016108e690615718565b8760048111156133c857fe5b8160048111156133d457fe5b1461347257600060018960048111156133e957fe5b0360ff166001901b90508060ff168460000160049054906101000a900460ff1619821660ff161461342c5760405162461bcd60e51b81526004016108e6906155e8565b835460ff640100000000808304821684189091160264ff0000000019909116178085558990859063ff0000001916630100000083600481111561346b57fe5b0217905550505b50600080805260028201602052604081208354600880549293929091600160381b900461ffff169081106134a257fe5b600091825260208220600290910201805460405163f7434ea960e01b81529193506001600160a01b03169063f7434ea9906134e4906001860190600401615504565b60206040518083038186803b1580156134fc57600080fd5b505afa158015613510573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506135349190810190614b0c565b905061354483600233348561423e565b5080836002015410156135695760405162461bcd60e51b81526004016108e690615788565b600483015461357e908263ffffffff61434016565b60048481019190915560038401805460ff19169055825460405163c13517e160e01b81526001600160a01b039091169163c13517e19184916135c891600291600189019101615802565b6020604051808303818588803b1580156135e157600080fd5b505af11580156135f5573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525061361a9190810190614b0c565b84600001819055503384600101600b6101000a8154816001600160a01b0302191690836001600160a01b031602179055506000600b60008460000160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060008660000154815260200190815260200160002090508560000160099054906101000a900461ffff1661ffff168160000160006101000a8154816001600160601b0302191690836001600160601b031602179055508b81600001600c6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060018660000160006101000a81548160ff02191690831515021790555085600001600581819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff1602179055505084600101600181819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff1602179055505060018760010180549050038c6001600160a01b03167f28ec07f413c7805003c29837f7f1b3799f30f7f87a1e1b5b9aaee94f665218ac8360000160009054906101000a90046001600160601b03166040516137ee9190615830565b60405180910390a38554600161ffff600160481b80840482169290920116026affff00000000000000000019909116178655845483546001600160a01b03167f74baab670a4015ab2f1b467c5252a96141a2573f2908e58a92081e80d3cfde3d60028a5460ff16600381111561386057fe5b14613888578560000160149054906101000a90046001600160601b031660020260010161389e565b8554600160a01b90046001600160601b03166002025b8f6001600160a01b031660018c6001018054905003016040516138c2929190615859565b60405180910390a3871561393957336001600160a01b03168c6001600160a01b03166001896001018054905003018460000160009054906101000a90046001600160a01b03166001600160a01b03166000805160206159dd8339815191528c8c6040516139309291906155c5565b60405180910390a45b505050505050505050505050565b6001600160a01b03831660009081526009602052604090208054610100900460ff16801561398457506000815460ff16600381111561398257fe5b145b6139a05760405162461bcd60e51b81526004016108e690615708565b6003546000906139cd90610eb9906001600160401b0380821691600160401b90041663ffffffff6141fc16565b6001600160401b031690508042106139f75760405162461bcd60e51b81526004016108e690615698565b815460ff1916600317825560018083018054600092613a199083908301614395565b81548110613a2357fe5b60009182526020808320600160069093020191820180546001600160a01b0319163317905581546001600160401b034216600160b81b0267ffffffffffffffff60b81b19909116178083556008805461ffff600019909101908116600160381b0261ffff60381b19909316929092178455848052600484018352604080862060020190935291842082549395509093909290919084908110613ac157fe5b60009182526020822060029091020154600880546001600160a01b039092169350839163f7434ea9919087908110613af557fe5b90600052602060002090600202016001016040518263ffffffff1660e01b8152600401613b229190615504565b60206040518083038186803b158015613b3a57600080fd5b505afa158015613b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613b729190810190614b0c565b90506000613b8b6002548361422990919063ffffffff16565b9050613b9b84600133348561423e565b508084600101541015613bc05760405162461bcd60e51b81526004016108e690615788565b60038401805460ff191660019081179091558801546040516001600160a01b038d169133917fd63ca5272e9e07a30a33cc438f956428bf02359db9798ce3fe30140dadf8d74191613c1791600019909101906157f4565b60405180910390a38815610bd957336001600160a01b03168b6001600160a01b031660018a600101805490500301846001600160a01b03166000805160206159dd8339815191528d8d604051613c6e9291906155c5565b60405180910390a45050505050505050505050565b6003546001600160401b031681565b6001546001600160a01b03163314613cbc5760405162461bcd60e51b81526004016108e690615748565b600380546001600160401b03909216600160c01b026001600160c01b03909216919091179055565b60008282016001600160401b038085169082161015613d0a576001600160401b03613d0c565b805b949350505050565b6001600160a01b03831660009081526009602052604081206001810180548254929360001982019360ff1692909184908110613d4c57fe5b600091825260208083206006909202909101805489845260048201909252604090922091925061ffff6501000000000090910416906003846003811115613d8f57fe5b1415613dcd576001876002811115613da357fe5b1415613db357855461ff00191686555b855460ff19168655825461ff001916610100178355613f72565b6002846003811115613ddb57fe5b1415613f72576001876002811115613def57fe5b1415613e94578160011415613e8f57825462010000900460ff16613db357825460ff64010000000090910416600f1415613e6157855461010061ffff1990911681176affffffffffffffff00000019166301000000426001600160401b031602178755835461ff001916178355613e8f565b825460ff67ffffffffffffffff60b81b011916600160b81b426001600160401b0316021763ff000000191683555b613f72565b825462ff00001916620100001783556001821415613ec257855460ff19168655825461ff0019166101001783555b6002876002811115613ed057fe5b148015613f12575060028301546001600160a01b03161580613f12575082546001820154600160781b9091046001600160401b03908116630100000090920416105b15613f7257600181018054600285018054600160581b9092046001600160a01b03166001600160a01b031990921691909117905554835467ffffffffffffffff60781b191663010000009091046001600160401b0316600160781b021783555b825460001961ffff65010000000000808404821692909201160266ffff00000000001990911617835560018181018054899260ff1990911690836002811115613fb757fe5b021790555084896001600160a01b03167fb6759576305cce1591ca803d5fbf22b83b8a7465c093df7b013cb829e98718e18a604051613ff691906157f4565b60405180910390a3505050505050505050565b6001600160a01b038216600090815260096020526040812060018082018054929392909161403a9083908301614395565b8154811061404457fe5b60009182526020808320600880546006909402909101805461ffff600019909501948516600160381b0261ffff60381b1990911617815584805260048101835260408086206002019093529184208154929550929391849081106140a457fe5b60009182526020822060029091020154600880546001600160a01b039092169350839163f7434ea99190879081106140d857fe5b90600052602060002090600202016001016040518263ffffffff1660e01b81526004016141059190615504565b60206040518083038186803b15801561411d57600080fd5b505afa158015614131573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506141559190810190614b0c565b9050600061416e6002548361422990919063ffffffff16565b905061417e84600133348561423e565b508084600101541061419a5760038401805460ff191660011790555b8751156141f157336001600160a01b0316896001600160a01b0316600189600101805490500301846001600160a01b03166000805160206159dd8339815191528b6040516141e891906155d7565b60405180910390a45b505050505050505050565b6000826001600160401b0316826001600160401b0316111561422057506000612f8f565b50808203612f8f565b600082820183811015613d0a57600019613d0c565b600080806142748561426f8a8a600281111561425657fe5b6003811061426057fe5b0154879063ffffffff61434016565b614352565b6001600160a01b038816600090815260058b0160205260409020919350915082908860028111156142a157fe5b600381106142ab57fe5b018054909101905581888860028111156142c157fe5b600381106142cb57fe5b0180549091019055600488018054830190558015614309576040516001600160a01b0387169082156108fc029083906000818181858888f150505050505b5090505b95945050505050565b60008261432557506000612f8f565b8282028284828161433257fe5b0414613d0a57600019613d0c565b60008282111561422057506000612f8f565b6000808383111561436857508290506000614370565b508190508083035b9250929050565b60405180606001604052806003906020820280388339509192915050565b8154818355818111156143c1576006028160060283600052602060002091820191016143c19190614444565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061440757805160ff1916838001178555614434565b82800160010185558215614434579182015b82811115614434578251825591602001919060010190614419565b50614440929150614498565b5090565b6117b291905b808211156144405780546001600160f81b03191681556001810180546001600160a01b03199081169091556002820180549091169055600061448f60038301826144b2565b5060060161444a565b6117b291905b80821115614440576000815560010161449e565b50805460008255906000526020600020908101906144d09190614498565b50565b8035612f8f81615993565b60008083601f8401126144f057600080fd5b5081356001600160401b0381111561450757600080fd5b60208301915083602082028301111561437057600080fd5b60008083601f84011261453157600080fd5b5081356001600160401b0381111561454857600080fd5b60208301915083600182028301111561437057600080fd5b8035612f8f816159a7565b8035612f8f816159b0565b8035612f8f816159bd565b8035612f8f816159ca565b8051612f8f816159ca565b8035612f8f816159d3565b6000602082840312156145b457600080fd5b6000613d0c84846144d3565b600080600080600060a086880312156145d857600080fd5b60006145e488886144d3565b95505060206145f5888289016144d3565b945050604061460688828901614581565b935050606061461788828901614581565b925050608061462888828901614581565b9150509295509295909350565b6000806040838503121561464857600080fd5b600061465485856144d3565b9250506020614665858286016144d3565b9150509250929050565b60008060008060008060006080888a03121561468a57600080fd5b60006146968a8a6144d3565b97505060208801356001600160401b038111156146b257600080fd5b6146be8a828b016144de565b965096505060408801356001600160401b038111156146dc57600080fd5b6146e88a828b016144de565b945094505060608801356001600160401b0381111561470657600080fd5b6147128a828b016144de565b925092505092959891949750929550565b60008060008060006080868803121561473b57600080fd5b600061474788886144d3565b955050602061475888828901614576565b9450506040614769888289016144d3565b93505060608601356001600160401b0381111561478557600080fd5b6147918882890161451f565b92509250509295509295909350565b6000806000604084860312156147b557600080fd5b60006147c186866144d3565b93505060208401356001600160401b038111156147dd57600080fd5b6147e98682870161451f565b92509250509250925092565b6000806040838503121561480857600080fd5b600061481485856144d3565b925050602061466585828601614581565b60008060006060848603121561483a57600080fd5b600061484686866144d3565b935050602061485786828701614581565b9250506040614868868287016144d3565b9150509250925092565b60008060006060848603121561488757600080fd5b600061489386866144d3565b93505060206148a486828701614581565b92505060406148688682870161456b565b6000806000606084860312156148ca57600080fd5b60006148d686866144d3565b93505060206148e786828701614581565b925050604061486886828701614581565b6000806000806080858703121561490e57600080fd5b600061491a87876144d3565b945050602061492b87828801614581565b935050604061493c87828801614581565b925050606061494d87828801614581565b91505092959194509250565b600080600080600060a0868803121561497157600080fd5b600061497d88886144d3565b955050602061498e88828901614581565b945050604061499f88828901614581565b93505060606149b088828901614581565b9250506080614628888289016144d3565b600080600080600080606087890312156149da57600080fd5b86356001600160401b038111156149f057600080fd5b6149fc89828a016144de565b965096505060208701356001600160401b03811115614a1a57600080fd5b614a2689828a016144de565b945094505060408701356001600160401b03811115614a4457600080fd5b614a5089828a016144de565b92509250509295509295509295565b600080600060408486031215614a7457600080fd5b60006147c18686614560565b60008060008060408587031215614a9657600080fd5b84356001600160401b03811115614aac57600080fd5b614ab88782880161451f565b945094505060208501356001600160401b03811115614ad657600080fd5b614ae28782880161451f565b95989497509550505050565b600060208284031215614b0057600080fd5b6000613d0c8484614581565b600060208284031215614b1e57600080fd5b6000613d0c848461458c565b60008060408385031215614b3d57600080fd5b60006148148585614581565b60008060408385031215614b5c57600080fd5b6000614b68858561458c565b92505060206146658582860161458c565b600060208284031215614b8b57600080fd5b6000613d0c8484614597565b600080600060608486031215614bac57600080fd5b6000614bb88686614597565b9350506020614bc986828701614597565b925050604061486886828701614597565b6000614be68383614c63565b505060200190565b614bf78161588c565b82525050565b614c0681615873565b614c1081846125e4565b9250614c1b826117b2565b8060005b83811015610f85578151614c338782614bda565b9650614c3e8361587d565b925050600101614c1f565b614bf781615897565b614bf7614c5e8261589c565b6117b2565b614bf7816117b2565b614bf7614c5e826117b2565b6000614c8382615879565b614c8d8185615883565b9350614c9d81856020860161593b565b614ca68161596b565b9093019392505050565b600081546001811660008114614ccd5760018114614cf357614d32565b607f6002830416614cde8187615883565b60ff1984168152955050602085019250614d32565b60028204614d018187615883565b9550614d0c85615867565b60005b82811015614d2b57815488820152600190910190602001614d0f565b8701945050505b505092915050565b614bf7816158a9565b614bf781615903565b614bf78161590e565b614bf781615919565b6000614d6a8385615883565b9350614d7783858461592f565b614ca68361596b565b6000614d8d602083615883565b7f54686520726561736f6e2068617320616c7265616479206265656e2075736564815260200192915050565b6000614dc6601783615883565b7f4368616c6c656e6765206f7574206f6620626f756e6473000000000000000000815260200192915050565b6000614dff601583615883565b7420b83832b0b6103832b934b7b21034b99037bb32b960591b815260200192915050565b6000614e30601883615883565b7f4e6f7420656e6f7567682076616c696420766f75636865730000000000000000815260200192915050565b6000614e69601883615883565b7f526561736f6e206d757374206265207370656369666965640000000000000000815260200192915050565b6000614ea2601083615883565b6f496e636f727265637420696e7075747360801b815260200192915050565b6000614ece601183615883565b7024b731b7b93932b1ba1039ba30ba3ab99760791b815260200192915050565b6000614efb601e83615883565b7f4475706c6963617465206164647265737320616c726561647920757365640000815260200192915050565b6000614f34601d83615883565b7f42656e6566696369617279206d757374206e6f7420626520656d707479000000815260200192915050565b6000614f6d601183615883565b70496e76616c6964207369676e617475726560781b815260200192915050565b6000614f9a601783615883565b7f526571756573746572206973206e6f742066756e646564000000000000000000815260200192915050565b6000614fd3601a83615883565b7f43616e27742072656d6f76652061667465722072656e6577616c000000000000815260200192915050565b600061500c601183615883565b7010d85b89dd08195e1958dd5d19481e595d607a1b815260200192915050565b6000615039601183615883565b7010d85b89dd081c99585c1c1b1e481e595d607a1b815260200192915050565b6000615066601c83615883565b7f54696d6520746f206368616c6c656e6765206861732070617373656400000000815260200192915050565b600061509f601483615883565b73139bc8191a5cdc1d5d19481d1bc8185c1c19585b60621b815260200192915050565b60006150cf601883615883565b7f416e6f7468657220726561736f6e206973206163746976650000000000000000815260200192915050565b6000615108601b83615883565b7f5375626d697373696f6e206d757374206265207265736f6c7665640000000000815260200192915050565b6000615141600c83615883565b6b57726f6e672073746174757360a01b815260200192915050565b6000615169601783615883565b7f5468652072657175657374206973206469737075746564000000000000000000815260200192915050565b60006151a2601f83615883565b7f5375626d697373696f6e20616c7265616479206265656e206372656174656400815260200192915050565b60006151db601683615883565b7514da5919481a5cc8185b1c9958591e48199d5b99195960521b815260200192915050565b600061520d601f83615883565b7f5468652063616c6c6572206d7573742062652074686520676f7665726e6f7200815260200192915050565b6000615246601683615883565b7557726f6e67206475706c69636174652073746174757360501b815260200192915050565b6000615278601f83615883565b7f41707065616c20706572696f64206973206f76657220666f72206c6f73657200815260200192915050565b60006152b1601983615883565b7f526561736f6e206d757374206265206c65667420656d70747900000000000000815260200192915050565b60006152ea601d83615883565b7f596f75206d7573742066756c6c792066756e6420796f75722073696465000000815260200192915050565b6000615323601e83615883565b7f43616e27742062652061206475706c6963617465206f6620697473656c660000815260200192915050565b614bf7816158d2565b614bf7816158e5565b614bf7816158f1565b614bf781615924565b614bf7816158f7565b60006153888286614c52565b6002820191506153988285614c6c565b6020820191506153a88284614c6c565b506020019392505050565b60208101612f8f8284614bee565b60608101612f8f8284614bfd565b60208101612f8f8284614c49565b60c081016153eb8287614c49565b6153f86020830186614bfd565b6154056080830185614d43565b61430d60a0830184614c63565b6101408101615421828d614c49565b61542e602083018c614c49565b61543b604083018b614c49565b615448606083018a614d4c565b615455608083018961534f565b61546260a083018861534f565b61546f60c083018761534f565b61547c60e0830186614bee565b61548a610100830185614bee565b615498610120830184615361565b9b9a5050505050505050505050565b606081016154b58286614c63565b6154c26020830185614bee565b613d0c6040830184614c63565b608081016154dd8287614c63565b6154ea6020830186615361565b6154f76040830185614c63565b61430d6060830184614c63565b60208082528101610a368184614cb0565b606081016155238286614d3a565b6155306020830185615373565b818103604083015261430d8184614c78565b60208101612f8f8284614d43565b6040810161555e8285614d43565b610a366020830184614c63565b60c081016155798289614d55565b6155866020830188615358565b6155936040830187615358565b6155a06060830186614c49565b6155ad6080830185614c49565b6155ba60a0830184614c63565b979650505050505050565b60208082528101613d0c818486614d5e565b60208082528101610a368184614c78565b60208082528101612f8f81614d80565b60208082528101612f8f81614db9565b60208082528101612f8f81614df2565b60208082528101612f8f81614e23565b60208082528101612f8f81614e5c565b60208082528101612f8f81614e95565b60208082528101612f8f81614ec1565b60208082528101612f8f81614eee565b60208082528101612f8f81614f27565b60208082528101612f8f81614f60565b60208082528101612f8f81614f8d565b60208082528101612f8f81614fc6565b60208082528101612f8f81614fff565b60208082528101612f8f8161502c565b60208082528101612f8f81615059565b60208082528101612f8f81615092565b60208082528101612f8f816150c2565b60208082528101612f8f816150fb565b60208082528101612f8f81615134565b60208082528101612f8f8161515c565b60208082528101612f8f81615195565b60208082528101612f8f816151ce565b60208082528101612f8f81615200565b60208082528101612f8f81615239565b60208082528101612f8f8161526b565b60208082528101612f8f816152a4565b60208082528101612f8f816152dd565b60208082528101612f8f81615316565b60a081016157b6828861534f565b6157c36020830187614bee565b6157d06040830186614c63565b6157dd6060830185614d43565b6157ea6080830184615358565b9695505050505050565b60208101612f8f8284614c63565b604081016158108285614c63565b8181036020830152613d0c8184614cb0565b60208101612f8f8284615358565b60208101612f8f828461536a565b6040810161584c8285615373565b610a366020830184614bee565b6040810161555e828561536a565b60009081526020902090565b50600390565b5190565b60200190565b90815260200190565b6000612f8f826158d9565b151590565b6001600160f01b03191690565b6000612f8f8261588c565b806125e481615975565b806125e48161597f565b806125e481615989565b61ffff1690565b6001600160a01b031690565b6001600160401b031690565b60ff1690565b6001600160601b031690565b6000612f8f826158b4565b6000612f8f826158be565b6000612f8f826158c8565b6000612f8f826158f7565b82818337506000910152565b60005b8381101561595657818101518382015260200161593e565b83811115615965576000848401525b50505050565b601f01601f191690565b600381106144d057fe5b600581106144d057fe5b600481106144d057fe5b61599c8161588c565b81146144d057600080fd5b61599c816158a9565b600381106144d057600080fd5b600581106144d057600080fd5b61599c816117b2565b61599c816158e556fedccf2f8b2cc26eafcd61905cba744cff4b81d14740725f6376390dc6298a6a3ca365627a7a72315820590606406739dd1c71a5083187f4563207095773c469e460b371ac02ef05e7836c6578706572696d656e74616cf564736f6c6343000511004061606860eb6c87306811e2695215385101daab53bd6ab4e9f9049aead9363c7d000000000000000000000000988b3a538b618c7a603e1c11ab82cd16dbe28069000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000001e187e00000000000000000000000000000000000000000000000000000000001e187e00000000000000000000000000000000000000000000000000000000000049d40000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000004e200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000170000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000005a2f697066732f516d5156396e4b6d4a52396f364152714777513139633837596478653471675535475a4e50636176644d3548784d2f70726f6f662d6f662d68756d616e6974792d72656769737472792d706f6c6963792e706466000000000000000000000000000000000000000000000000000000000000000000000000005a2f697066732f516d5156396e4b6d4a52396f364152714777513139633837596478653471675535475a4e50636176644d3548784d2f70726f6f662d6f662d68756d616e6974792d72656769737472792d706f6c6963792e706466000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000988b3a538b618c7a603e1c11ab82cd16dbe28069000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000001e187e00000000000000000000000000000000000000000000000000000000001e187e00000000000000000000000000000000000000000000000000000000000049d40000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000004e200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000170000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000005a2f697066732f516d5156396e4b6d4a52396f364152714777513139633837596478653471675535475a4e50636176644d3548784d2f70726f6f662d6f662d68756d616e6974792d72656769737472792d706f6c6963792e706466000000000000000000000000000000000000000000000000000000000000000000000000005a2f697066732f516d5156396e4b6d4a52396f364152714777513139633837596478653471675535475a4e50636176644d3548784d2f70726f6f662d6f662d68756d616e6974792d72656769737472792d706f6c6963792e706466000000000000

-----Decoded View---------------
Arg [0] : _arbitrator (address): 0x988b3a538b618c7a603e1c11ab82cd16dbe28069
Arg [1] : _arbitratorExtraData (bytes): 0x00000000000000000000000000000000000000000000000000000000000000170000000000000000000000000000000000000000000000000000000000000003
Arg [2] : _registrationMetaEvidence (string): /ipfs/QmQV9nKmJR9o6ARqGwQ19c87Ydxe4qgU5GZNPcavdM5HxM/proof-of-humanity-registry-policy.pdf
Arg [3] : _clearingMetaEvidence (string): /ipfs/QmQV9nKmJR9o6ARqGwQ19c87Ydxe4qgU5GZNPcavdM5HxM/proof-of-humanity-registry-policy.pdf
Arg [4] : _submissionBaseDeposit (uint256): 100000000000000000
Arg [5] : _submissionDuration (uint64): 31557600
Arg [6] : _renewalPeriodDuration (uint64): 31557600
Arg [7] : _challengePeriodDuration (uint64): 302400
Arg [8] : _multipliers (uint256[3]): 0xSystem.Collections.Generic.List`1[System.Object]
Arg [9] : _requiredNumberOfVouches (uint64): 1

-----Encoded View---------------
23 Constructor Arguments found :
Arg [0] : 000000000000000000000000988b3a538b618c7a603e1c11ab82cd16dbe28069
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000260
Arg [4] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [5] : 0000000000000000000000000000000000000000000000000000000001e187e0
Arg [6] : 0000000000000000000000000000000000000000000000000000000001e187e0
Arg [7] : 0000000000000000000000000000000000000000000000000000000000049d40
Arg [8] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [9] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [10] : 0000000000000000000000000000000000000000000000000000000000004e20
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [15] : 000000000000000000000000000000000000000000000000000000000000005a
Arg [16] : 2f697066732f516d5156396e4b6d4a52396f3641527147775131396338375964
Arg [17] : 78653471675535475a4e50636176644d3548784d2f70726f6f662d6f662d6875
Arg [18] : 6d616e6974792d72656769737472792d706f6c6963792e706466000000000000
Arg [19] : 000000000000000000000000000000000000000000000000000000000000005a
Arg [20] : 2f697066732f516d5156396e4b6d4a52396f3641527147775131396338375964
Arg [21] : 78653471675535475a4e50636176644d3548784d2f70726f6f662d6f662d6875
Arg [22] : 6d616e6974792d72656769737472792d706f6c6963792e706466000000000000


Deployed ByteCode Sourcemap

10616:64871:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18502:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18502:37:0;;;:::i;:::-;;;;;;;;;;;;;;;;19838:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19838:59:0;;;;;;;;:::i;:::-;;;;;;;;17830:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17830:23:0;;;:::i;:::-;;;;;;;;31023:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31023:153:0;;;;;;;;:::i;:::-;;19230:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19230:32:0;;;:::i;:::-;;;;;;;;29922:435;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29922:435:0;;;;;;;;:::i;18764:37::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18764:37:0;;;:::i;69681:274::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;69681:274:0;;;;;;;;:::i;59693:1366::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;59693:1366:0;;;;;;;;:::i;39595:163::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;39595:163:0;;;;;;;;:::i;29320:153::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29320:153:0;;;;;;;;:::i;70381:506::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;70381:506:0;;;;;;;;:::i;:::-;;;;;;;;18946:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18946:33:0;;;:::i;34511:578::-;;;;;;;;;:::i;35573:622::-;;;;;;;;;:::i;61286:473::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;61286:473:0;;;;;;;;:::i;27532:1085::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27532:1085:0;;;;;;;;:::i;54645:1521::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;54645:1521:0;;;;;;;;:::i;72999:970::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;72999:970:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;52801:1408;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;52801:1408:0;;;;;;;;:::i;19363:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19363:29:0;;;:::i;19099:33::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19099:33:0;;;:::i;40004:169::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;40004:169:0;;;;;;;;:::i;18385:35::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18385:35:0;;;:::i;69220:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;69220:118:0;;;:::i;31854:149::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31854:149:0;;;;;;;;:::i;71117:625::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;71117:625:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;56768:2525;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;56768:2525:0;;;;;;;;:::i;38499:891::-;;;;;;;;;:::i;28821:289::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28821:289:0;;;;;;;;:::i;74778:706::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;74778:706:0;;;;;;;;:::i;:::-;;;;;;;;;;;31436:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31436:153:0;;;;;;;;:::i;41379:3342::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;41379:3342:0;;;;;;;;:::i;33611:445::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;33611:445:0;;;;;;;;:::i;17945:33::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17945:33:0;;;:::i;68828:247::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;68828:247:0;;;;;;;;:::i;40291:493::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40291:493:0;;;:::i;72058:698::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;72058:698:0;;;;;;;;:::i;:::-;;;;;;;;;;;;32527:730;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32527:730:0;;;;;;;;:::i;49702:2895::-;;;;;;;;;:::i;20016:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20016:88:0;;;;;;;;:::i;:::-;;;;;;;;;74218:229;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;74218:229:0;;;;;;;;:::i;32130:104::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32130:104:0;;;;;;;;:::i;19532:42::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19532:42:0;;;;;;;;:::i;:::-;;;;;;;;;;45234:4081;;;;;;;;;:::i;36617:1668::-;;;;;;;;;:::i;18203:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18203:32:0;;;:::i;30549:163::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30549:163:0;;;;;;;;:::i;18502:37::-;;;-1:-1:-1;;;18502:37:0;;-1:-1:-1;;;;;18502:37:0;;:::o;19838:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17830:23::-;;;-1:-1:-1;;;;;17830:23:0;;:::o;31023:153::-;20274:8;;-1:-1:-1;;;;;20274:8:0;20260:10;:22;20252:66;;;;-1:-1:-1;;;20252:66:0;;;;;;;;;;;;;;;;;31122:21;:46;31023:153::o;19230:32::-;;;;:::o;29922:435::-;20274:8;;-1:-1:-1;;;;;20274:8:0;20260:10;:22;20252:66;;;;-1:-1:-1;;;20252:66:0;;;;;;;;;-1:-1:-1;;;;;30080:79:0;;;;:57;;:33;;30114:22;30080:57;:33;:57;:::i;:::-;-1:-1:-1;;;;;30080:79:0;;30072:108;;;;-1:-1:-1;;;30072:108:0;;;;;;;;;30191:18;:40;;-1:-1:-1;;30191:40:0;-1:-1:-1;;;;;30191:40:0;;;;-1:-1:-1;;30242:46:0;-1:-1:-1;;;30242:46:0;;;;;;;;;;;-1:-1:-1;;;;30299:50:0;-1:-1:-1;;;30299:50:0;;;;;;;;;;;29922:435::o;18764:37::-;;;-1:-1:-1;;;18764:37:0;;-1:-1:-1;;;;;18764:37:0;;:::o;69681:274::-;-1:-1:-1;;;;;69841:26:0;;69798:4;69841:26;;;:11;:26;;;;;:35;;:47;;69798:4;;69841:35;69877:10;;69841:47;;;;;;;;;;;;;;-1:-1:-1;;;;;69906:41:0;;;;:27;69841:47;;;;;69906:27;;;;:41;;;;;;;;;-1:-1:-1;;69681:274:0;;;;;;:::o;59693:1366::-;59756:18;59783:7;59777:14;;;;;;;;59869:10;59802:31;59836:44;;;:32;:44;;;;;;;;:56;;;;;;;;59926:24;;-1:-1:-1;;;59926:24:0;;-1:-1:-1;;;;;59926:24:0;60046:25;;;:11;:25;;;;;;59980:23;60110:19;;60130:26;;59756:35;;-1:-1:-1;59836:56:0;;59926:24;;-1:-1:-1;;;;;59980:23:0;;;;60046:25;;59802:31;60110:19;-1:-1:-1;;60130:30:0;;;60110:51;;;;;;;;;;;;;;60202:31;;;:18;60110:51;;;;;60202:18;;;:31;;;;;;60283:21;;;;;;;;;;;60266:39;;:16;;;:39;;;;;;60375:24;;60356:18;:44;;60110:51;;-1:-1:-1;60202:31:0;;60266:39;;60110:51;;-1:-1:-1;;;60375:24:0;;;;;60356:44;;;;;;;;;;;;;;;;;;;60429:25;;60356:44;;-1:-1:-1;;;;;;60429:25:0;60459:10;60421:48;60413:57;;;;;;60490:16;;;;;;;60489:17;60481:26;;;;;;60607:15;60587:16;;;;;;:35;;;;;;;;;60583:322;;;60788:15;60773:30;;60583:322;;;60843:16;60823;;;;;;:36;;;;;;;;;60819:86;;;60889:16;60874:31;;60819:86;60955:10;60942;60923:63;60972:12;60967:18;;;;;;;;60923:63;;;;;;;;;;;;;;;60997:54;61011:12;61025:11;61038:12;60997:13;:54::i;:::-;59693:1366;;;;;;;;;;;:::o;39595:163::-;39664:10;39656:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;39656:34:0;;;;;;;;;;:41;;-1:-1:-1;;39656:41:0;39693:4;39656:41;;;39713:37;39656:34;;39713:37;;;39595:163;:::o;29320:153::-;20274:8;;-1:-1:-1;;;;;20274:8:0;20260:10;:22;20252:66;;;;-1:-1:-1;;;20252:66:0;;;;;;;;;29419:21;:46;29320:153::o;70381:506::-;70575:28;;:::i;:::-;-1:-1:-1;;;;;70642:26:0;;70616:23;70642:26;;;:11;:26;;;;;:35;;:47;;70678:10;;70642:47;;;;;;;;;;;;;;70730:32;;;70642:47;;;;;;;;70730:18;;;:32;;;;;;70795:24;;;:16;;;:24;;;;;-1:-1:-1;;;;;70846:33:0;;;;:19;;;:33;;;;;;;70830:49;;;;;;;;;70642:47;;-1:-1:-1;70846:33:0;70830:49;;70846:33;70830:49;;;;;;;;;;;;;;;;;;;;;;;;70381:506;;;;;;;;;;:::o;18946:33::-;;;;:::o;34511:578::-;34656:10;34612:29;34644:23;;;:11;:23;;;;;34687:21;;;;;;;34686:22;:58;;;;-1:-1:-1;34733:11:0;34712:17;;;;:32;;;;;;;;;34686:58;34678:83;;;;-1:-1:-1;;;34678:83:0;;;;;;;;;34776:19;;;:26;34772:142;;34850:17;;;34824:44;;-1:-1:-1;;;;;34824:44:0;;;-1:-1:-1;;;34824:44:0;-1:-1:-1;;;;34824:44:0;;;;;;34883:19;;-1:-1:-1;34883:19:0;;;34772:142;34924:35;;-1:-1:-1;;34924:35:0;34944:15;34924:35;;;;;35001:19;;:26;34975:53;;34989:10;;34975:53;;;;35001:26;34975:53;;;;;;;;;;35039:42;35059:10;35071:9;;35039:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35039:19:0;;-1:-1:-1;;;35039:42:0:i;:::-;34511:578;;;;;:::o;35573:622::-;35722:10;35678:29;35710:23;;;:11;:23;;;;;35752:21;;;;;;;:57;;;;-1:-1:-1;35798:11:0;35777:17;;;;:32;;;;;;;;;35752:57;35744:82;;;;-1:-1:-1;;;35744:82:0;;;;;;;;;35926:21;;35837:23;;35863:86;;35898:50;;-1:-1:-1;;;;;35898:18:0;;;;-1:-1:-1;;;35926:21:0;;;35898:50;:27;:50;:::i;:::-;35863:25;;;;;-1:-1:-1;;;;;35863:25:0;;:34;:86::i;:::-;-1:-1:-1;;;;;35837:112:0;;;35975:18;35968:3;:25;;35960:55;;;;-1:-1:-1;;;35960:55:0;;;;;;;;;36026:35;;-1:-1:-1;;36026:35:0;36046:15;36026:35;;;;;36107:19;;:26;36077:57;;36095:10;;36077:57;;;;36107:26;36077:57;;;;;;;;;;36145:42;36165:10;36177:9;;36145:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;36145:19:0;;-1:-1:-1;;;36145:42:0:i;:::-;35573:622;;;;;;:::o;61286:473::-;-1:-1:-1;;;;;61412:26:0;;61380:29;61412:26;;;:11;:26;;;;;61475:19;;;61495:26;;61412;;61380:29;-1:-1:-1;;61495:30:0;;;61475:51;;;;;;;;;;;;;;;;61449:77;;61537:37;61577:18;61596:7;:24;;;;;;;;;;;;61577:44;;;;;;;;;;;;;;;;;;61704:1;61675:19;;:26;61577:44;;;;;61648:25;;61639:112;;61577:44;;-1:-1:-1;61729:10:0;;-1:-1:-1;;;;;;;61708:19:0;;;61675:52;;;;;61648:25;;;-1:-1:-1;;;;;;;;;;;61639:112:0;;;61741:9;;;;61639:112;;;;;;;;;;61286:473;;;;;;:::o;27532:1085::-;20274:8;;-1:-1:-1;;;;;20274:8:0;20260:10;:22;20252:66;;;;-1:-1:-1;;;20252:66:0;;;;;;;;;27701:17;;27753:18;:25;-1:-1:-1;;27753:29:0;27686:12;27793:779;27810:25;;;27793:779;;;27857:29;27889:11;:30;27901:14;;27916:1;27901:17;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27889:30:0;;;;;;;;;;;;-1:-1:-1;27889:30:0;27942:19;;;:26;27889:30;;-1:-1:-1;27942:31:0;27934:75;;;;-1:-1:-1;;;27934:75:0;;;;;;;;;28024:34;;-1:-1:-1;;;;28024:34:0;-1:-1:-1;;;;;;;;28024:34:0;;;;;;-1:-1:-1;28125:19:0;;;28145:28;;28073:9;;;;-1:-1:-1;;28145:28:0;;28125:19;;28145:28;;;:::i;:::-;28125:49;;;;;;;;;;;;;;;28189:28;;;-1:-1:-1;;28189:28:0;;;;;-1:-1:-1;;28234:39:0;;28269:3;-1:-1:-1;;;;;28234:39:0;;;;;28125:49;;;;;;;;28288:51;;-1:-1:-1;;;;28288:51:0;-1:-1:-1;;;28288:51:0;;;;;28354:23;;;;;;;;28125:49;-1:-1:-1;28404:9:0;;28414:1;28404:12;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:48;68:73;;58:2;;155:1;152;145:12;58:2;174:33;;;69:4;55:19;;;-1:-1;16:22;-1:-1;;;;;82:30;;79:2;;;125:1;122;115:12;79:2;155:14;151:38;;;137:53;;134:2;;;203:1;200;193:12;134:2;28398:26:0;;:30;28394:166;;;28535:10;28515:14;;28530:1;28515:17;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28510:23:0;28461:18;28480:16;28461:36;;;;;;;;;;;;;;;;;;;;;:47;-1:-1:-1;;;;;28461:47:0;-1:-1:-1;;;;;;;;;;;28547:9:0;;28557:1;28547:12;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:48;68:73;;58:2;;155:1;152;145:12;58:2;174:33;;;69:4;55:19;;;-1:-1;16:22;-1:-1;;;;;82:30;;79:2;;;125:1;122;115:12;79:2;155:14;151:38;;;137:53;;134:2;;;203:1;200;193:12;134:2;28452:108:0;;;;;;;;;;;;;;;;28394:166;-1:-1:-1;;27837:3:0;;27793:779;;;-1:-1:-1;;28582:17:0;:27;-1:-1:-1;;;;;;27532:1085:0:o;54645:1521::-;-1:-1:-1;;;;;54777:26:0;;54745:29;54777:26;;;:11;:26;;;;;54840:19;;;:31;;54777:26;;54745:29;54860:10;;54840:31;;;;;;;;;;;;;;;;;;;54890:16;;54840:31;;-1:-1:-1;54890:16:0;;;;;54882:56;;;;-1:-1:-1;;;54882:56:0;;;;;;;;;54977:26;;;-1:-1:-1;;;54977:26:0;;;;;;54951:23;;55030:38;;:11;;54977:26;;55030:18;:38;:::i;:::-;55097:15;;;:22;55014:54;;-1:-1:-1;55136:21:0;;;55132:61;;;55183:10;55172:21;;55132:61;55229:21;;55397:26;;;;55229:21;;;;;;;55206:20;;-1:-1:-1;;;;;55397:26:0;:42;;;;:121;;-1:-1:-1;55461:16:0;55444:13;:33;;;;;;;;;:73;;;-1:-1:-1;55498:19:0;55481:13;:36;;;;;;;;;55444:73;55377:141;-1:-1:-1;55543:18:0;55529:574;55567:8;55563:1;:12;55529:574;;;55597:26;55626:11;:31;55638:7;:15;;55654:1;55638:18;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;55638:18:0;55626:31;;;;;;;;;;;;55672:26;;-1:-1:-1;;55672:26:0;;;55626:31;-1:-1:-1;55713:379:0;;;;55877:15;55859:14;;;;:33;;;;;;;;;:81;;;-1:-1:-1;55914:26:0;55896:14;;;;:44;;;;;;;;;55859:81;55855:174;;;56025:4;55963:16;;;55980:23;;-1:-1:-1;;55980:27:0;;;55963:45;;;;;;;;;;;;;;;;;;;:66;;;;;;;-1:-1:-1;;55963:66:0;;;;;;;;;55855:174;56050:26;;-1:-1:-1;;56050:26:0;;;55713:379;-1:-1:-1;55577:3:0;;55529:574;;;-1:-1:-1;;56113:45:0;;;;;;-1:-1:-1;;;56113:45:0;-1:-1:-1;;;;56113:45:0;;;;;;;;;;-1:-1:-1;;;;;;;54645:1521:0:o;72999:970::-;73127:13;73155;73183:18;73216:20;73251:25;73291:22;73328:23;73366:25;73406:34;73455:17;73500:23;73526:11;:26;73538:13;-1:-1:-1;;;;;73526:26:0;-1:-1:-1;;;;;73526:26:0;;;;;;;;;;;;:35;;73562:10;73526:47;;;;;;;;;;;;;;;;;;;;;73606:16;;;73858:17;;;73668:21;73890:26;;;;73606:16;;;;;-1:-1:-1;73606:16:0;73637;;;;;-1:-1:-1;73668:21:0;;;;;;-1:-1:-1;73704:21:0;;;;;;-1:-1:-1;73740:26:0;;;;;;;-1:-1:-1;;;;73781:23:0;;;;;-1:-1:-1;;;;73819:24:0;;;;-1:-1:-1;;;;;;73858:17:0;;;;-1:-1:-1;73890:26:0;;;-1:-1:-1;73931:19:0;;;;;-1:-1:-1;;72999:970:0;;;;;;;;;;;;;:::o;52801:1408::-;-1:-1:-1;;;;;52900:26:0;;52868:29;52900:26;;;:11;:26;;;;;52983:1;52954:19;;:26;;52900;;-1:-1:-1;;52954:30:0;;;52868:29;;52954:19;:30;;53021;;;;;;;;;;;;;;53107:23;;53021:30;;;;;53076:28;;53021:30;;-1:-1:-1;;;;53107:23:0;;;-1:-1:-1;;;;;53107:23:0;;;-1:-1:-1;;;53076:28:0;;;;53070:3;:34;:60;53062:90;;;;-1:-1:-1;;;53062:90:0;;;;;;;;;53172:16;;;;53171:17;53163:53;;;;-1:-1:-1;;;53163:53:0;;;;;;;;;53227:25;53288:26;53267:17;;;;:47;;;;;;;;;53263:616;;;53466:21;;;;;;;53461:149;;53508:28;;;-1:-1:-1;;53508:28:0;;;;-1:-1:-1;;53555:39:0;;53590:3;-1:-1:-1;;;;;53555:39:0;;;;;53461:149;-1:-1:-1;53652:13:0;53263:616;;;53710:21;53689:17;;;;:42;;;;;;;;;53685:194;;;-1:-1:-1;53748:29:0;;-1:-1:-1;;53748:29:0;;;:21;53804:17;;;-1:-1:-1;;;;;53804:17:0;53685:194;;;53852:27;;-1:-1:-1;;;53852:27:0;;;;;;;;53685:194;53892:31;;-1:-1:-1;;53892:31:0;;;53934:23;;-1:-1:-1;;53934:23:0;;;;;53974:15;;;:22;:27;53970:108;;54016:62;54031:13;54046:9;10927:2;54016:14;:62::i;:::-;54091:65;54114:9;54125:13;54140:9;54151:1;54154;54091:22;:65::i;19363:29::-;;;;:::o;19099:33::-;;;;:::o;40004:169::-;40076:10;40105:5;40068:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;40068:34:0;;;;;;;;;;:42;;-1:-1:-1;;40068:42:0;;;40126:39;40068:34;;40126:39;;;40004:169;:::o;18385:35::-;;;-1:-1:-1;;;18385:35:0;;-1:-1:-1;;;;;18385:35:0;;:::o;69220:118::-;69305:18;:25;69220:118;;:::o;31854:149::-;20274:8;;-1:-1:-1;;;;;20274:8:0;20260:10;:22;20252:66;;;;-1:-1:-1;;;20252:66:0;;;;;;;;;31951:20;:44;31854:149::o;71117:625::-;-1:-1:-1;;;;;71463:26:0;71231:13;71463:26;;;:11;:26;;;;;71522:17;;;71697:19;;;:26;71522:17;;;;;-1:-1:-1;;;;;71554:25:0;;;;;;-1:-1:-1;;;71594:16:0;;;;;;71522:17;71625:21;;;;;71661;;;;;;;;71117:625::o;56768:2525::-;-1:-1:-1;;;;;56952:26:0;;56920:29;56952:26;;;:11;:26;;;;;57015:19;;;:31;;56952:26;;56920:29;57035:10;;57015:31;;;;;;;;;;;;;;57087:32;;;:18;57015:31;;;;;57087:18;;;:32;;;;;;57152:24;;;:16;;;:24;;;;;;57195:16;;57015:31;;-1:-1:-1;57152:24:0;57195:16;;;;;;57187:56;;;;-1:-1:-1;;;57187:56:0;;;;;;;;;-1:-1:-1;;;;;57262:28:0;;57254:70;;;;-1:-1:-1;;;57254:70:0;;;;;;;;;57352:16;;;;;;57337:12;57692:11;;;;;:46;;-1:-1:-1;57717:21:0;;;;;;;;;57707:31;;57692:46;57688:1419;;;-1:-1:-1;;;;;;57823:33:0;;;;;;:19;;;:33;;;;;57862:16;57823:57;;;57803:15;57764:56;;;;:116;57688:1419;;;57912:10;57902:6;:20;;;;;;;;;57898:1209;;;58024:15;58004:37;;;;57983:16;57963:38;;;;-1:-1:-1;;;;;58137:33:0;;57939:21;58137:33;;;:19;;;:33;;;;;:56;;;;58077:57;;;;;57963:78;;;58077:116;58217:20;:78;;58294:1;58217:78;;;58275:16;58256:5;:16;;;58240:13;:32;:51;;;;;;58217:78;58208:87;;57898:1209;;;;;58485:11;;:57;;;;-1:-1:-1;58516:26:0;;;;-1:-1:-1;;;;;58500:42:0;;;58516:26;;58500:42;58485:57;:78;;;;-1:-1:-1;58546:17:0;;58485:78;58481:615;;;-1:-1:-1;58593:16:0;;;;;58647:1;58628:20;;;58481:615;;;58775:26;;;;-1:-1:-1;;;;;58775:26:0;:40;;:59;;-1:-1:-1;58819:15:0;;;58775:59;:72;;;-1:-1:-1;58838:9:0;;;58775:72;58771:325;;;58868:13;58884:5;58904:6;58899:12;;;;;;;;58884:28;;;;;;;;;58868:44;;58951:1;58940:8;:12;:140;;59079:1;58940:140;;;59027:16;;;;-1:-1:-1;;;;;58977:33:0;;;;;;:19;;;:33;;;;;59047:8;;59027:16;59016:6;59011:12;;;;;;;;58977:47;;;;;;;;;:66;58976:79;;;;;;58940:140;58931:149;;58771:325;;-1:-1:-1;;;;;59117:33:0;;59176:1;59117:33;;;:19;;;:33;;;;;;59156:15;59117:56;;:60;;;59227:16;59188:57;:61;;;59260:25;;;;;;;;;;59176:1;59260:25;;59117:33;59260:25;;-1:-1:-1;;;;;;;;;;;;;;;;56768:2525:0:o;38499:891::-;-1:-1:-1;;;;;38606:26:0;;38574:29;38606:26;;;:11;:26;;;;;38672:15;38651:17;;;;:36;;;;;;;;;38643:61;;;;-1:-1:-1;;;38643:61:0;;;;;;;;;38741:19;;;38761:26;;38715:23;;38741:19;-1:-1:-1;;38761:30:0;;;38741:51;;;;;;;;;;;;;;38833:21;;;38741:51;;;;;;;;38833:18;;;:21;;;;;;38887:16;;;:19;;;;;38978:24;;38959:18;:44;;38741:51;;-1:-1:-1;38833:21:0;;38887:19;;38741:51;;-1:-1:-1;;;38978:24:0;;;;;;38959:44;;;;;;;;;;;;;;;;;;39037:25;;:77;;-1:-1:-1;;;39037:77:0;;38959:44;;-1:-1:-1;;;;;;39037:25:0;;:41;;:77;;:25;39079:34;;;39037:77;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39037:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39037:77:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;39037:77:0;;;;;;;;;39014:100;;39125:14;39142:45;39165:21;;39142:15;:22;;:45;;;;:::i;:::-;39125:62;;39198:68;39209:5;39216:15;39233:10;39245:9;39256;39198:10;:68::i;:::-;-1:-1:-1;39324:9:0;39283:5;39303:15;39283:37;;:50;39279:103;;39348:16;;;:34;;-1:-1:-1;;39348:34:0;39367:15;39348:34;;;39279:103;38499:891;;;;;;;;:::o;28821:289::-;20274:8;;-1:-1:-1;;;;;20274:8:0;20260:10;:22;20252:66;;;;-1:-1:-1;;;20252:66:0;;;;;;;;;-1:-1:-1;;;;;28943:26:0;;28911:29;28943:26;;;:11;:26;;;;;28988:21;;;;;;;:57;;;;-1:-1:-1;29034:11:0;29013:17;;;;:32;;;;;;;;;28988:57;28980:82;;;;-1:-1:-1;;;28980:82:0;;;;;;;;;29073:29;;-1:-1:-1;;29073:29:0;;;-1:-1:-1;28821:289:0:o;74778:706::-;74936:13;74964:23;;:::i;:::-;-1:-1:-1;;;;;75102:26:0;;75002:16;75102:26;;;:11;:26;;;;;:35;;:47;;75002:16;;;;75138:10;;75102:47;;;;;;;;;;;;;;75190:32;;;75102:47;;;;;;;;75190:18;;;;:32;;;;;;75255:24;;;:16;;;:24;;;;;;;75311:21;;;;75418:16;;;;;75449;;;;75344:132;;;;;;;;;75311:21;;;;;;75301:32;;;-1:-1:-1;75102:47:0;;-1:-1:-1;75190:32:0;;75255:24;;75301:32;;75255:24;;75418:16;;;75449;;75344:132;75255:24;;;75344:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;74778:706;;;;;;;;;:::o;31436:153::-;20274:8;;-1:-1:-1;;;;;20274:8:0;20260:10;:22;20252:66;;;;-1:-1:-1;;;20252:66:0;;;;;;;;;31535:21;:46;31436:153::o;41379:3342::-;-1:-1:-1;;;;;41582:26:0;;41550:29;41582:26;;;:11;:26;;;;;41648:15;41627:17;;;;:36;;;;;;;;;41619:61;;;;-1:-1:-1;;;41619:61:0;;;;;;;;;41717:19;;;41737:26;;41691:23;;41717:19;-1:-1:-1;;41737:30:0;;;41717:51;;;;;;;;;;;;;;41866:21;;;:18;41717:51;;;;;41866:18;;;:21;;;;;;41924:16;;;:19;;;;;;41717:51;;-1:-1:-1;41986:15:0;41966:16;;;;;;:35;;;;;;;;;41958:71;;;;-1:-1:-1;;;41958:71:0;;;;;;;;;-1:-1:-1;;42116:18:0;;-1:-1:-1;;;;;42116:18:0;42110:3;:24;-1:-1:-1;;;42092:15:0;42310:1599;42327:22;;;:74;;;;-1:-1:-1;42378:23:0;;;42353:15;;;:22;-1:-1:-1;;;42378:23:0;;;-1:-1:-1;;;;;42378:23:0;-1:-1:-1;42327:74:0;42310:1599;;;42423:22;;11432:66;42641:13;42656:21;;42678:1;42656:24;;;;;;;;;;;;;42603:78;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;42603:78:0;;;42593:89;;;;;;42571:111;;42701:12;42743:6;42751:16;;42769:11;42726:55;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;42726:55:0;;;42716:66;;;;;;42701:81;;42845:22;42870:11;;42882:1;42870:14;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:48;68:73;;58:2;;155:1;152;145:12;58:2;174:33;;;69:4;55:19;;;-1:-1;16:22;-1:-1;;;;;82:30;;79:2;;;125:1;122;115:12;79:2;155:14;151:38;;;137:53;;134:2;;;203:1;200;193:12;134:2;42845:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;43043:4:0;43028:20;;43022:27;43097:4;43082:20;;43076:27;43159:4;43144:20;;43138:27;42845:39;;-1:-1:-1;43022:27:0;;43076;;-1:-1:-1;43130:36:0;;;-1:-1:-1;;43211:2:0;43207:6;;43203:19;;;43220:2;43215:7;43203:19;43249:1;:7;;43254:2;43249:7;:18;;;;43260:1;:7;;43265:2;43260:7;43249:18;43241:48;;;;-1:-1:-1;;;43241:48:0;;;;;;;;;43377:24;43387:4;43393:1;43396;43399;43377:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;43377:24:0;;;-1:-1:-1;;43377:24:0;;-1:-1:-1;;;;;43507:27:0;;43478:26;43507:27;;;:11;43377:24;43507:27;;;;;43554:18;;43377:24;;-1:-1:-1;43507:27:0;-1:-1:-1;43554:18:0;;;;;43553:19;;-1:-1:-1;;43553:41:0;;;-1:-1:-1;43553:41:0;;-1:-1:-1;;;43553:41:0;-1:-1:-1;43576:18:0;;;;;;;43553:41;:81;;;;-1:-1:-1;43612:22:0;;;;;-1:-1:-1;;;;;43612:22:0;43598:36;;;43553:81;:128;;;;;43657:21;;43679:1;43657:24;;;;;;;;;;;;;43651:3;:30;43553:128;:163;;;;;43702:14;-1:-1:-1;;;;;43685:31:0;:13;-1:-1:-1;;;;;43685:31:0;;;43553:163;43549:349;;;43737:7;:15;;43758:14;43737:36;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;43737:36:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43737:36:0;;;;;-1:-1:-1;;;;;43737:36:0;;;;;;;43813:4;43792:7;:18;;;:25;;;;;;;;;;;;;;;;;;43867:14;-1:-1:-1;;;;;43841:41:0;43852:13;-1:-1:-1;;;;;43841:41:0;;;;;;;;;;;43549:349;-1:-1:-1;;42403:3:0;;42310:1599;;;-1:-1:-1;43926:6:0;43921:586;43938:17;;;:67;;;;-1:-1:-1;43982:23:0;;;43959:15;;;:22;-1:-1:-1;;;43982:23:0;;;-1:-1:-1;;;;;43982:23:0;-1:-1:-1;43938:67:0;43921:586;;;44145:26;44174:11;:24;44186:8;;44195:1;44186:11;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44174:24:0;;;;;;;;;;;;-1:-1:-1;44174:24:0;44218:18;;44174:24;;-1:-1:-1;44218:18:0;;;;;44217:19;:41;;;;-1:-1:-1;44240:18:0;;;;;;;44217:41;:81;;;;-1:-1:-1;44276:22:0;;;;;-1:-1:-1;;;;;44276:22:0;44262:36;;;44217:81;:133;;;;;44315:7;:20;44323:8;;44332:1;44323:11;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44315:20:0;-1:-1:-1;;;;;44315:20:0;;;;;;;;;;;;:35;44336:13;-1:-1:-1;;;;;44315:35:0;-1:-1:-1;;;;;44315:35:0;;;;;;;;;;;;;;;;;;;;;;44217:133;:165;;;;;44371:8;;44380:1;44371:11;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44354:28:0;:13;-1:-1:-1;;;;;44354:28:0;;;44217:165;44213:283;;;44403:7;:15;;44424:8;;44433:1;44424:11;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;45:23;;-1:-1;44403:33:0;;;;;;;;;;;;-1:-1:-1;;;;;44403:33:0;;;-1:-1:-1;;;;;;44403:33:0;;;;;;;;;44455:25;;-1:-1:-1;;44455:25:0;;;;;44213:283;-1:-1:-1;44007:3:0;;43921:586;;;-1:-1:-1;44551:23:0;;;44525:15;;;:22;-1:-1:-1;;;44551:23:0;;;-1:-1:-1;;;;;44551:23:0;-1:-1:-1;44525:49:0;44517:86;;;;-1:-1:-1;;;44517:86:0;;;;;;;;;-1:-1:-1;;44614:46:0;;-1:-1:-1;;44614:46:0;44634:26;44614:46;;;;44671:42;;-1:-1:-1;;;;;44709:3:0;44671:42;-1:-1:-1;;;44671:42:0;-1:-1:-1;;;;44671:42:0;;;;;;-1:-1:-1;;;;;;;41379:3342:0:o;33611:445::-;20274:8;;-1:-1:-1;;;;;20274:8:0;20260:10;:22;20252:66;;;;-1:-1:-1;;;20252:66:0;;;;;;;;;33772:18;33791:25;;33732:37;;33772:18;-1:-1:-1;;33791:29:0;;;33772:49;;;;;;;;;;;;;;;;33732:89;;33832:18;33856:191;;;;;;;;33898:11;-1:-1:-1;;;;;33856:191:0;;;;;33945:14;:34;;;;;;;;;;-1:-1:-1;;;;;33945:34:0;-1:-1:-1;;;;;33856:191:0;;;;;34015:20;;33856:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;33856:191:0;;;;-1:-1:-1;;27:10;;39:1;23:18;;;45:23;;;33832:216:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33832:216:0;-1:-1:-1;;;33832:216:0;-1:-1:-1;;;;;33832:216:0;;;-1:-1:-1;;;;;;33832:216:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33832:216:0;;;;;;;;;;:::i;17945:33::-;;;;:::o;68828:247::-;-1:-1:-1;;;;;68945:26:0;;68896:4;68945:26;;;:11;:26;;;;;68989:21;;;;;;;:78;;;;-1:-1:-1;69049:18:0;;69020:25;;-1:-1:-1;;;;;69049:18:0;;;69020:25;;;;;;;69014:3;:31;:53;;68989:78;68982:85;;;68828:247;;;;:::o;40291:493::-;40385:10;40341:29;40373:23;;;:11;:23;;;;;40436:15;40415:17;;;;:36;;;;;;;;;40407:61;;;;-1:-1:-1;;;40407:61:0;;;;;;;;;40505:19;;;40525:26;;40479:23;;40505:19;-1:-1:-1;;40525:30:0;;;40505:51;;;;;;;;;;;;;40569:31;;-1:-1:-1;;40569:31:0;;;40505:51;;;;;;40611:23;;-1:-1:-1;;40611:23:0;;;;;-1:-1:-1;40694:19:0;;:26;40505:51;;-1:-1:-1;40647:84:0;;40670:10;;;;-1:-1:-1;;40694:30:0;;;;40505:51;40647:22;:84::i;:::-;40291:493;;:::o;72058:698::-;72207:18;72240;72273:14;72302:12;72329:31;72388:23;72414:11;:26;72426:13;-1:-1:-1;;;;;72414:26:0;-1:-1:-1;;;;;72414:26:0;;;;;;;;;;;;:35;;72450:10;72414:47;;;;;;;;;;;;;;;;72502:32;;;72414:47;;;;;;;;72502:18;;:32;;;-1:-1:-1;;72502:32:0;;;;72567:21;;;;72638:19;;72567:21;;;;;;-1:-1:-1;;;72603:20:0;;-1:-1:-1;;;;;72603:20:0;;-1:-1:-1;72638:19:0;;-1:-1:-1;72672:16:0;;;;-1:-1:-1;72703:34:0;;;;-1:-1:-1;;;;;72703:34:0;;-1:-1:-1;72058:698:0;-1:-1:-1;;72058:698:0:o;32527:730::-;20274:8;;-1:-1:-1;;;;;20274:8:0;20260:10;:22;20252:66;;;;-1:-1:-1;;;20252:66:0;;;;;;;;;32710:18;32729:25;;32670:37;;32710:18;-1:-1:-1;;32729:29:0;;;32710:49;;;;;;;;;;;;;;;;;;;;32802:34;;32875:207;;;;;;;;-1:-1:-1;;;;;32917:25:0;;32875:207;;-1:-1:-1;;;32802:34:0;;;-1:-1:-1;;;;;32802:34:0;;;32839:1;32802:38;;;32875:207;;;;;;;33036:34;;;32875:207;;;;32802:34;32875:207;;;;;;;;-1:-1:-1;;32875:207:0;;;;;;;;;;;;;;;;;;;;;;;32710:49;;-1:-1:-1;32802:38:0;;32851:18;;32875:207;;;;;;;;;;;33036:34;32875:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32875:207:0;;;;-1:-1:-1;;27:10;;39:1;23:18;;;45:23;;;-1:-1;32851:232:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32851:232:0;-1:-1:-1;;;32851:232:0;-1:-1:-1;;;;;32851:232:0;;;-1:-1:-1;;;;;;32851:232:0;;;;;;;;;;;;;;;;;;;;;;23:18:-1;;32851:232:0;;;;;;;;;:::i;:::-;;;;;33116:22;33112:1;:26;-1:-1:-1;;;;;33099:67:0;;33140:25;;33099:67;;;;;;;;;;;;;;;;33199:22;33195:1;:26;33224:1;33195:30;-1:-1:-1;;;;;33182:67:0;;33227:21;;33182:67;;;;;;;;;;;;;;;;20320:1;;32527:730;;;;:::o;49702:2895::-;49822:10;49813:5;:19;;;;;;;;;;49805:28;;;;;;-1:-1:-1;;;;;49929:26:0;;49897:29;49929:26;;;:11;:26;;;;;49995;49974:17;;;;:47;;;;;;;;;:93;;;-1:-1:-1;50046:21:0;50025:17;;;;:42;;;;;;;;;49974:93;49966:118;;;;-1:-1:-1;;;49966:118:0;;;;;;;;;50121:19;;;50141:26;;50095:23;;50121:19;-1:-1:-1;;50141:30:0;;;50121:51;;;;;;;;;;;;;;;;;;;50191:16;;50121:51;;-1:-1:-1;50191:16:0;;50183:49;;;;-1:-1:-1;;;50183:49:0;;;;;;;;;50266:23;;-1:-1:-1;;;50266:23:0;;;;50251:38;;50243:74;;;;-1:-1:-1;;;50243:74:0;;;;;;;;;50330:27;50360:32;;;:18;;;:32;;;;;50462:24;;50443:18;:44;;50360:32;;50330:27;50443:18;;-1:-1:-1;;;50462:24:0;;;;;50443:44;;;;;;;;;;;;;;;;;;50549:25;;50588:19;;50549:59;;-1:-1:-1;;;50549:59:0;;50443:44;;-1:-1:-1;50443:44:0;;-1:-1:-1;;;;;50549:25:0;;;;:38;;:59;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50549:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;50549:59:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;50549:59:0;;;;;;;;;50500:108;;;;50634:17;50627:3;:24;;:49;;;;;50661:15;50655:3;:21;50627:49;50619:83;;;;-1:-1:-1;;;50619:83:0;;;;;;;;;50819:25;;50859:19;;50819:60;;-1:-1:-1;;;50819:60:0;;50715:15;;;;-1:-1:-1;;;;;50819:25:0;;;;:39;;:60;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50819:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;50819:60:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;50819:60:0;;;;;;;;;50813:67;;;;;;;;50798:82;;50909:5;50899:15;;;;;;;;:6;:15;;;;;;;;;50895:387;;;50947:21;;50934:34;;50895:387;;;51004:10;50994:6;:20;;;;;;;;;50990:292;;;51047:21;;51034:34;;50990:292;;;51122:20;;;-1:-1:-1;51229:1:0;51194:33;;;51193:37;51173:17;51169:3;:21;:61;51161:105;;;;-1:-1:-1;;;51161:105:0;;;;;;;;;-1:-1:-1;51385:21:0;;;;;;;;;51346:19;51368:39;;;:16;;;;:39;;;;;;51435:16;;;;51368:39;;51435:16;;;;;51426:25;;;;;;;:5;:25;;;;;;;;;;51418:60;;;;-1:-1:-1;;;51418:60:0;;;;;;;;;51509:25;;51546:19;;51509:93;;-1:-1:-1;;;51509:93:0;;51491:15;;-1:-1:-1;;;;;51509:25:0;;:36;;:93;;51546:19;51509:25;51567:34;;;51509:93;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51509:93:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51509:93:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;51509:93:0;;;;;;;;;51491:111;-1:-1:-1;51613:14:0;51630:71;11168:5;51649:29;51491:111;51667:10;51649:29;:17;:29;:::i;:::-;51648:52;;;;;51630:10;;51648:52;;51630:71;:17;:71;:::i;:::-;51613:88;;51712:17;51732:58;51743:5;51750;51757:10;51769:9;51780;51732:10;:58::i;:::-;51712:78;;51861:10;-1:-1:-1;;;;;51806:80:0;51840:12;51825:13;-1:-1:-1;;;;;51806:80:0;;51854:5;51873:12;51806:80;;;;;;;;;;;;;;;;51934:9;51903:5;51923;51918:11;;;;;;;;51903:27;;;;;;;;;:40;51899:691;;51984:10;51964:16;;;;;;:30;;;;;;;;;51960:547;;;52015:16;;;:24;;52034:5;;52015:16;-1:-1:-1;;52015:24:0;;52034:5;52015:24;;;;;;;;;;;;;51960:547;;;52147:25;;52198:19;;52147:107;;-1:-1:-1;;;52147:107:0;;-1:-1:-1;;;;;52147:25:0;;;;:32;;52186:10;;52147:107;;52198:19;52147:25;52219:34;;;52147:107;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52147:107:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;52273:21:0;;;;:23;;;;;;;;;;;;;;;;-1:-1:-1;;52273:23:0;;;;;;;;;-1:-1:-1;;52334:16:0;;;;:35;;52358:10;52334:35;:23;:35;:::i;:::-;52315:16;;;:54;52388:16;;;:29;;-1:-1:-1;;52388:29:0;;;51960:547;52558:12;52543:13;-1:-1:-1;;;;;52526:52:0;;52572:5;52526:52;;;;;;;;;;;;;;;51899:691;49702:2895;;;;;;;;;;;;;;:::o;20016:88::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20016:88:0;;;-1:-1:-1;;;20016:88:0;;-1:-1:-1;;;;;20016:88:0;;:::o;74218:229::-;-1:-1:-1;;;;;74352:26:0;;74309:4;74352:26;;;:11;:26;;;;;:35;;:47;;74309:4;;74352:35;74388:10;;74352:47;;;;;;;;;;;;;;74417:15;74352:47;;;;;74417:15;:22;;-1:-1:-1;;74218:229:0;;;;;:::o;32130:104::-;20274:8;;-1:-1:-1;;;;;20274:8:0;20260:10;:22;20252:66;;;;-1:-1:-1;;;20252:66:0;;;;;;;;;32206:8;:20;;-1:-1:-1;;;;;;32206:20:0;-1:-1:-1;;;;;32206:20:0;;;;;;;;;;32130:104::o;19532:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19532:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19532:42:0;;;-1:-1:-1;;;;19532:42:0;;;-1:-1:-1;;;;;19532:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45234:4081::-;-1:-1:-1;;;;;45408:26:0;;45376:29;45408:26;;;:11;:26;;;;;45470;45449:17;;;;:47;;;;;;;;;45445:313;;;45530:11;45519:7;:22;;;;;;;;;;45511:59;;;;-1:-1:-1;;;45511:59:0;;;;;;;;;45445:313;;;45611:21;45590:17;;;;:42;;;;;;;;;45586:172;;;45666:11;45655:7;:22;;;;;;;;;45647:60;;;;-1:-1:-1;;;45647:60:0;;;;;;;;45586:172;45736:22;;-1:-1:-1;;;45736:22:0;;;;;;;;45586:172;45797:19;;;45817:26;;45771:23;;45797:19;-1:-1:-1;;45817:30:0;;;45797:51;;;;;;;;;;;;;;45905:23;;45797:51;;;;;45873:28;;45797:51;;-1:-1:-1;;;;45905:23:0;;;-1:-1:-1;;;;;45905:23:0;;;-1:-1:-1;;;45873:28:0;;;;45867:3;:34;:61;;45859:102;;;;-1:-1:-1;;;45859:102:0;;;;;;;;;46023:23;;-1:-1:-1;;;46023:23:0;;;;45974:27;46004:43;;;:18;;;:43;;;;;;46138:21;;;;;;46178:7;:27;;;;;;;;;46174:735;;;-1:-1:-1;;;;;46234:25:0;;46269:11;46234:25;;;:11;:25;;;;;:32;;;:46;;;;;;;;;:86;;;-1:-1:-1;;;;;;46284:25:0;;;;;;:11;:25;;;;;:36;;;;;;46234:86;46226:121;;;;-1:-1:-1;;;46226:121:0;;;;;;;;;46391:12;-1:-1:-1;;;;;46374:29:0;:13;-1:-1:-1;;;;;46374:29:0;;;46366:72;;;;-1:-1:-1;;;46366:72:0;;;;;;;;;46482:16;46465:13;:33;;;;;;;;;:65;;;-1:-1:-1;46519:11:0;46502:13;:28;;;;;;;;;46465:65;46457:102;;;;-1:-1:-1;;;46457:102:0;;;;;;;;;-1:-1:-1;;;;;46587:41:0;;;;;;:27;;;:41;;;;;;;;46586:42;46578:85;;;;-1:-1:-1;;;46578:85:0;;;;;;;;;-1:-1:-1;;;;;46682:41:0;;;;;;:27;;;:41;;;;;;;;:48;;46726:4;-1:-1:-1;;46682:48:0;;;;;;;;46786:11;:25;;;;;;:31;46749:34;;;:68;;-1:-1:-1;;46749:68:0;-1:-1:-1;;;46786:31:0;;;-1:-1:-1;;;;;46786:31:0;46749:68;;;;;;;;46174:735;;;46865:16;;;;46864:17;46856:53;;;;-1:-1:-1;;;46856:53:0;;;;;;;;;46947:7;46930:24;;;;;;;;:13;:24;;;;;;;;;46926:474;;46975:15;47016:1;47005:7;46999:14;;;;;;;;:18;46993:25;;:1;:25;;46975:43;;47136:9;47098:47;;47112:7;:19;;;;;;;;;;;;47111:20;47099:9;:32;47098:47;;;47090:92;;;;-1:-1:-1;;;47090:92:0;;;;;;;;;47203:32;;;;;;;;;;;;;;;-1:-1:-1;;47203:32:0;;;;;;;47377:7;;47203;;-1:-1:-1;;47353:31:0;;47377:7;47203:19;47353:31;;;;;;;;;;;;46926:474;;-1:-1:-1;47464:19:0;47486;;;:16;;;:19;;;;;47575:24;;47556:18;:44;;47486:19;;47464;47556:18;;-1:-1:-1;;;47575:24:0;;;;;47556:44;;;;;;;;;;;;;;;;;;47636:25;;:77;;-1:-1:-1;;;47636:77:0;;47556:44;;-1:-1:-1;;;;;;47636:25:0;;:41;;:77;;:25;47678:34;;;47636:77;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47636:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47636:77:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;47636:77:0;;;;;;;;;47613:100;;47724:75;47735:5;47742:16;47760:10;47772:9;47783:15;47724:10;:75::i;:::-;-1:-1:-1;47860:15:0;47818:5;47838:16;47818:38;;:57;;47810:99;;;;-1:-1:-1;;;47810:99:0;;;;;;;;;47939:16;;;;:40;;47963:15;47939:40;:23;:40;:::i;:::-;47920:16;;;;:59;;;;47990:16;;;:29;;-1:-1:-1;;47990:29:0;;;48136:25;;:114;;-1:-1:-1;;;48136:114:0;;-1:-1:-1;;;;;48136:25:0;;;;:39;;48182:15;;48136:114;;10818:1;;47990:29;48215:34;;;48136:114;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48136:114:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48136:114:0;;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;48136:114:0;;;;;;;;;48114:9;:19;;:136;;;;48284:10;48261:9;:20;;;:33;;;;;-1:-1:-1;;;;;48261:33:0;;;;;-1:-1:-1;;;;;48261:33:0;;;;;;48307:31;48341:32;:68;48382:14;:25;;;;;;;;;;-1:-1:-1;;;;;48382:25:0;-1:-1:-1;;;;;48341:68:0;-1:-1:-1;;;;;48341:68:0;;;;;;;;;;;;:89;48410:9;:19;;;48341:89;;;;;;;;;;;48307:123;;48474:7;:23;;;;;;;;;;;;48467:31;;48441:11;:23;;;:57;;;;;-1:-1:-1;;;;;48441:57:0;;;;;-1:-1:-1;;;;;48441:57:0;;;;;;48536:13;48509:11;:24;;;:40;;;;;-1:-1:-1;;;;;48509:40:0;;;;;-1:-1:-1;;;;;48509:40:0;;;;;;48581:4;48562:7;:16;;;:23;;;;;;;;;;;;;;;;;;48596:7;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48637:9;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48741:1;48712:10;:19;;:26;;;;:30;48697:13;-1:-1:-1;;;;;48676:92:0;;48744:11;:23;;;;;;;;;;-1:-1:-1;;;;;48744:23:0;48676:92;;;;;;;;;;;;;;;48781:25;;;;-1:-1:-1;;;48781:25:0;;;;;;;;;;;-1:-1:-1;;48781:25:0;;;;;;48886:19;;48846:25;;-1:-1:-1;;;;;48846:25:0;48824:307;48941:26;48920:17;;;;:47;;;;;;;;;:133;;49015:14;:34;;;;;;;;;;-1:-1:-1;;;;;49015:34:0;49011:1;:38;49052:1;49011:42;48920:133;;;48974:34;;-1:-1:-1;;;48974:34:0;;-1:-1:-1;;;;;48974:34:0;48970:1;:38;48920:133;49106:13;-1:-1:-1;;;;;49101:19:0;49097:1;49068:10;:19;;:26;;;;:30;:52;48824:307;;;;;;;;;;;;;;;;49148:27;;49144:163;;49285:10;-1:-1:-1;;;;;49195:112:0;49269:13;-1:-1:-1;;;;;49264:19:0;49260:1;49231:10;:19;;:26;;;;:30;:52;49204:14;:25;;;;;;;;;;-1:-1:-1;;;;;49204:25:0;-1:-1:-1;;;;;49195:112:0;-1:-1:-1;;;;;;;;;;;49297:9:0;;49195:112;;;;;;;;;;;;;;;;49144:163;45234:4081;;;;;;;;;;;;:::o;36617:1668::-;-1:-1:-1;;;;;36753:26:0;;36721:29;36753:26;;;:11;:26;;;;;36798:21;;;;;;;:57;;;;-1:-1:-1;36844:11:0;36823:17;;;;:32;;;;;;;;;36798:57;36790:82;;;;-1:-1:-1;;;36790:82:0;;;;;;;;;36972:21;;36883:23;;36909:86;;36944:50;;-1:-1:-1;;;;;36944:18:0;;;;-1:-1:-1;;;36972:21:0;;;36944:50;:27;:50;:::i;36909:86::-;-1:-1:-1;;;;;36883:112:0;;;37020:18;37014:3;:24;37006:63;;;;-1:-1:-1;;;37006:63:0;;;;;;;;;37080:41;;-1:-1:-1;;37080:41:0;37100:21;37080:41;;;;37160:19;;;37180:28;;-1:-1:-1;;37180:28:0;;37160:19;;37180:28;;;:::i;:::-;37160:49;;;;;;;;;;;;;;;;37220:17;37160:49;;;;;37220:17;;;:30;;-1:-1:-1;;;;;;37220:30:0;37240:10;37220:30;;;37261:42;;-1:-1:-1;;;;;37299:3:0;37261:42;-1:-1:-1;;;37261:42:0;-1:-1:-1;;;;37261:42:0;;;;;;;37340:18;:25;;37380:51;-1:-1:-1;;37340:29:0;;;37380:51;;;-1:-1:-1;;;37380:51:0;-1:-1:-1;;;;37380:51:0;;;;;;;;;37466:21;;;:18;;;:21;;;;;;:28;;:31;;;;;;37542:36;;37160:49;;-1:-1:-1;37340:29:0;;37466:31;;37160:49;;37340:18;:29;;37542:36;;;;;;;;;;;;;;;;;;:47;37657:18;:36;;-1:-1:-1;;;;;37542:47:0;;;;-1:-1:-1;37542:47:0;;37623:33;;37657:18;37676:16;;37657:36;;;;;;;;;;;;;;;;:56;;37623:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37623:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37623:91:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;37623:91:0;;;;;;;;;37600:114;;37725:14;37742:45;37765:21;;37742:15;:22;;:45;;;;:::i;:::-;37725:62;;37798:68;37809:5;37816:15;37833:10;37845:9;37856;37798:10;:68::i;:::-;-1:-1:-1;37928:9:0;37887:5;37907:15;37887:37;;:50;;37879:92;;;;-1:-1:-1;;;37879:92:0;;;;;;;;;37982:16;;;:34;;-1:-1:-1;;37982:34:0;38001:15;37982:34;;;;;;38078:19;;:26;38034:75;;-1:-1:-1;;;;;38034:75:0;;;38051:10;;38034:75;;;;-1:-1:-1;;38078:30:0;;;;38034:75;;;;;;;;;;38126:27;;38122:155;;38255:10;-1:-1:-1;;;;;38173:104:0;38239:13;-1:-1:-1;;;;;38234:19:0;38230:1;38201:10;:19;;:26;;;;:30;:52;38182:17;-1:-1:-1;;;;;38173:104:0;-1:-1:-1;;;;;;;;;;;38267:9:0;;38173:104;;;;;;;;;;;;;;;;36617:1668;;;;;;;;;;;:::o;18203:32::-;;;-1:-1:-1;;;;;18203:32:0;;:::o;30549:163::-;20274:8;;-1:-1:-1;;;;;20274:8:0;20260:10;:22;20252:66;;;;-1:-1:-1;;;20252:66:0;;;;;;;;;30654:23;:50;;-1:-1:-1;;;;;30654:50:0;;;-1:-1:-1;;;30654:50:0;-1:-1:-1;;;;;30654:50:0;;;;;;;;;30549:163::o;1503:150::-;1566:6;1596:7;;;-1:-1:-1;;;;;1621:7:0;;;;;;;;:24;;-1:-1:-1;;;;;1621:24:0;;;1631:1;1621:24;1614:31;1503:150;-1:-1:-1;;;;1503:150:0:o;65184:3318::-;-1:-1:-1;;;;;65316:26:0;;65284:29;65316:26;;;:11;:26;;;;;65399:1;65370:19;;:26;;65427:17;;65316:26;;-1:-1:-1;;65370:30:0;;;65427:17;;;65284:29;;65370:30;;65483;;;;;;;;;;;;;;;;;;;;;65550:26;;65619:32;;;:18;;;:32;;;;;;;65483:30;;-1:-1:-1;65550:26:0;;;;;;;65678:21;65668:6;:31;;;;;;;;;65664:2523;;;65731:15;65720:7;:26;;;;;;;;;65716:78;;;65765:29;;-1:-1:-1;;65765:29:0;;;65716:78;65811:31;;-1:-1:-1;;65811:31:0;;;65857:23;;-1:-1:-1;;65857:23:0;;;;;65664:2523;;;65912:26;65902:6;:36;;;;;;;;;65898:2289;;;66049:15;66038:7;:26;;;;;;;;;66034:2142;;;66089:18;66111:1;66089:23;66085:1170;;;66254:21;;;;;;;66249:987;;66308:19;;;;;;;;11065:2;66308:39;66304:771;;;66509:31;;66571:28;-1:-1:-1;;66571:28:0;;;;;-1:-1:-1;;66630:39:0;;66665:3;-1:-1:-1;;;;;66630:39:0;;;;;66700:23;;-1:-1:-1;;66700:23:0;;;;66304:771;;;66884:24;;-1:-1:-1;;;;;;66939:42:0;-1:-1:-1;;;66977:3:0;-1:-1:-1;;;;;66939:42:0;;;-1:-1:-1;;67012:35:0;;;66304:771;66034:2142;;;67343:28;;-1:-1:-1;;67343:28:0;;;;;67367:4;67485:23;;67481:149;;;67533:31;;-1:-1:-1;;67533:31:0;;;67587:23;;-1:-1:-1;;67587:23:0;;;;;67481:149;67848:16;67839:7;:25;;;;;;;;;:139;;;;-1:-1:-1;67869:26:0;;;;-1:-1:-1;;;;;67869:26:0;:40;;:108;;-1:-1:-1;67948:29:0;;67913:34;;;;-1:-1:-1;;;67948:29:0;;;-1:-1:-1;;;;;67948:29:0;;;67913:34;;;;;:64;67869:108;67835:326;;;68032:20;;;;;68003:26;;;:49;;-1:-1:-1;;;68032:20:0;;;-1:-1:-1;;;;;68032:20:0;-1:-1:-1;;;;;;68003:49:0;;;;;;;;;68107:34;68075:66;;-1:-1:-1;;;;68075:66:0;68107:34;;;;-1:-1:-1;;;;;68107:34:0;-1:-1:-1;;;68075:66:0;;;;67835:326;68356:28;;-1:-1:-1;;68356:28:0;;;;;;;;;;;;;-1:-1:-1;;68356:28:0;;;;;;;68395:16;;;:26;;68414:7;;-1:-1:-1;;68395:26:0;;;;68414:7;68395:26;;;;;;;;;;;;;68470:9;68455:13;-1:-1:-1;;;;;68437:57:0;;68481:12;68437:57;;;;;;;;;;;;;;;65184:3318;;;;;;;;;:::o;62067:1096::-;-1:-1:-1;;;;;62196:26:0;;62164:29;62196:26;;;:11;:26;;;;;62259:19;;;;62279:28;;62196:26;;62164:29;62259:19;;62279:28;;62259:19;;62279:28;;;:::i;:::-;62259:49;;;;;;;;;;;;;;;;62345:18;:25;;62259:49;;;;;;;62385:51;;;-1:-1:-1;;62345:29:0;;;62385:51;;;-1:-1:-1;;;62385:51:0;-1:-1:-1;;;;62385:51:0;;;;;;62471:21;;;:18;;;:21;;;;;;:28;;:31;;;;;;62547:36;;62259:49;;-1:-1:-1;62345:29:0;;62259:49;62345:29;;62547:36;;;;;;;;;;;;;;;;;;:47;62662:18;:36;;-1:-1:-1;;;;;62547:47:0;;;;-1:-1:-1;62547:47:0;;62628:33;;62662:18;62681:16;;62662:36;;;;;;;;;;;;;;;;:56;;62628:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;62628:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;62628:91:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;62628:91:0;;;;;;;;;62605:114;;62730:14;62747:45;62770:21;;62747:15;:22;;:45;;;;:::i;:::-;62730:62;;62803:68;62814:5;62821:15;62838:10;62850:9;62861;62803:10;:68::i;:::-;-1:-1:-1;62929:9:0;62888:5;62908:15;62888:37;;:50;62884:103;;62953:16;;;:34;;-1:-1:-1;;62953:34:0;62972:15;62953:34;;;62884:103;63004:23;;:27;63000:155;;63133:10;-1:-1:-1;;;;;63051:104:0;63117:13;-1:-1:-1;;;;;63112:19:0;63108:1;63079:10;:19;;:26;;;;:30;:52;63060:17;-1:-1:-1;;;;;63051:104:0;-1:-1:-1;;;;;;;;;;;63145:9:0;63051:104;;;;;;;;;;;;;;;63000:155;62067:1096;;;;;;;;;:::o;1663:167::-;1726:6;1754:2;-1:-1:-1;;;;;1749:7:0;:2;-1:-1:-1;;;;;1749:7:0;;1745:77;;;-1:-1:-1;1778:1:0;1771:8;;1745:77;-1:-1:-1;1815:7:0;;;1808:14;;595:138;652:4;678:7;;;703;;;;:22;;-1:-1:-1;;703:22:0;;64268:618;64406:4;;;64510:83;64532:7;64541:51;64563:6;64584:5;64579:11;;;;;;;;64563:28;;;;;;;;;64541:14;;:51;:21;:51;:::i;:::-;64510:21;:83::i;:::-;-1:-1:-1;;;;;64604:34:0;;;;;;:20;;;:34;;;;;64479:114;;-1:-1:-1;64479:114:0;-1:-1:-1;64479:114:0;;64644:5;64639:11;;;;;;;;64604:47;;;;;;;;:63;;;;;;;64710:12;64678:6;64699:5;64694:11;;;;;;;;64678:28;;;;;;;;:44;;;;;;;64733:17;;;:33;;;;;;64783:17;;64779:67;;64815:31;;-1:-1:-1;;;;;64815:17:0;;;:31;;;;;64833:12;;64815:31;;;;64833:12;64815:17;:31;;-1:-1:-1;;;;;64779:67:0;-1:-1:-1;64866:12:0;-1:-1:-1;64268:618:0;;;;;;;;:::o;1083:412::-;1140:4;1383:7;1379:34;;-1:-1:-1;1412:1:0;1405:8;;1379:34;1435:7;;;1440:2;1435;:7;:2;1460:6;;;;;:12;:27;;-1:-1:-1;;1460:27:0;;820:159;877:4;903:2;898;:7;894:77;;;-1:-1:-1;927:1:0;920:8;;63558:339;63677:10;63689:14;63743:10;63725:15;:28;63721:69;;;-1:-1:-1;63776:10:0;;-1:-1:-1;63788:1:0;63768:22;;63721:69;-1:-1:-1;63828:15:0;;-1:-1:-1;63815:28:0;;;63558:339;;;;;;:::o;10616:64871::-;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;10616:64871:0;;;-1:-1:-1;;10616:64871:0:o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10616:64871:0;;;-1:-1:-1;10616:64871:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;10616:64871:0;;;;;;;;-1:-1:-1;;;;;;10616:64871:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;313:352;;;443:3;436:4;428:6;424:17;420:27;410:2;;461:1;458;451:12;410:2;-1:-1;481:20;;-1:-1;;;;;510:30;;507:2;;;553:1;550;543:12;507:2;587:4;579:6;575:17;563:29;;638:3;630:4;622:6;618:17;608:8;604:32;601:41;598:2;;;655:1;652;645:12;1833:336;;;1947:3;1940:4;1932:6;1928:17;1924:27;1914:2;;1965:1;1962;1955:12;1914:2;-1:-1;1985:20;;-1:-1;;;;;2014:30;;2011:2;;;2057:1;2054;2047:12;2011:2;2091:4;2083:6;2079:17;2067:29;;2142:3;2134:4;2126:6;2122:17;2112:8;2108:32;2105:41;2102:2;;;2159:1;2156;2149:12;2177:168;2263:20;;2288:52;2263:20;2288:52;;2352:148;2428:20;;2453:42;2428:20;2453:42;;2507:150;2584:20;;2609:43;2584:20;2609:43;;3024:130;3091:20;;3116:33;3091:20;3116:33;;3161:134;3239:13;;3257:33;3239:13;3257:33;;3302:128;3368:20;;3393:32;3368:20;3393:32;;3437:241;;3541:2;3529:9;3520:7;3516:23;3512:32;3509:2;;;3557:1;3554;3547:12;3509:2;3592:1;3609:53;3654:7;3634:9;3609:53;;3685:759;;;;;;3865:3;3853:9;3844:7;3840:23;3836:33;3833:2;;;3882:1;3879;3872:12;3833:2;3917:1;3934:61;3987:7;3967:9;3934:61;;;3924:71;;3896:105;4032:2;4050:53;4095:7;4086:6;4075:9;4071:22;4050:53;;;4040:63;;4011:98;4140:2;4158:53;4203:7;4194:6;4183:9;4179:22;4158:53;;;4148:63;;4119:98;4248:2;4266:53;4311:7;4302:6;4291:9;4287:22;4266:53;;;4256:63;;4227:98;4356:3;4375:53;4420:7;4411:6;4400:9;4396:22;4375:53;;;4365:63;;4335:99;3827:617;;;;;;;;;4451:366;;;4572:2;4560:9;4551:7;4547:23;4543:32;4540:2;;;4588:1;4585;4578:12;4540:2;4623:1;4640:53;4685:7;4665:9;4640:53;;;4630:63;;4602:97;4730:2;4748:53;4793:7;4784:6;4773:9;4769:22;4748:53;;;4738:63;;4709:98;4534:283;;;;;;4824:1099;;;;;;;;5091:3;5079:9;5070:7;5066:23;5062:33;5059:2;;;5108:1;5105;5098:12;5059:2;5143:1;5160:53;5205:7;5185:9;5160:53;;;5150:63;;5122:97;5278:2;5267:9;5263:18;5250:32;-1:-1;;;;;5294:6;5291:30;5288:2;;;5334:1;5331;5324:12;5288:2;5362:80;5434:7;5425:6;5414:9;5410:22;5362:80;;;5352:90;;;;5229:219;5507:2;5496:9;5492:18;5479:32;-1:-1;;;;;5523:6;5520:30;5517:2;;;5563:1;5560;5553:12;5517:2;5591:87;5670:7;5661:6;5650:9;5646:22;5591:87;;;5581:97;;;;5458:226;5743:2;5732:9;5728:18;5715:32;-1:-1;;;;;5759:6;5756:30;5753:2;;;5799:1;5796;5789:12;5753:2;5827:80;5899:7;5890:6;5879:9;5875:22;5827:80;;;5817:90;;;;5694:219;5053:870;;;;;;;;;;;5930:763;;;;;;6115:3;6103:9;6094:7;6090:23;6086:33;6083:2;;;6132:1;6129;6122:12;6083:2;6167:1;6184:53;6229:7;6209:9;6184:53;;;6174:63;;6146:97;6274:2;6292:63;6347:7;6338:6;6327:9;6323:22;6292:63;;;6282:73;;6253:108;6392:2;6410:53;6455:7;6446:6;6435:9;6431:22;6410:53;;;6400:63;;6371:98;6528:2;6517:9;6513:18;6500:32;-1:-1;;;;;6544:6;6541:30;6538:2;;;6584:1;6581;6574:12;6538:2;6612:65;6669:7;6660:6;6649:9;6645:22;6612:65;;;6602:75;;;;6479:204;6077:616;;;;;;;;;6700:492;;;;6841:2;6829:9;6820:7;6816:23;6812:32;6809:2;;;6857:1;6854;6847:12;6809:2;6892:1;6909:53;6954:7;6934:9;6909:53;;;6899:63;;6871:97;7027:2;7016:9;7012:18;6999:32;-1:-1;;;;;7043:6;7040:30;7037:2;;;7083:1;7080;7073:12;7037:2;7111:65;7168:7;7159:6;7148:9;7144:22;7111:65;;;7101:75;;;;6978:204;6803:389;;;;;;7199:366;;;7320:2;7308:9;7299:7;7295:23;7291:32;7288:2;;;7336:1;7333;7326:12;7288:2;7371:1;7388:53;7433:7;7413:9;7388:53;;;7378:63;;7350:97;7478:2;7496:53;7541:7;7532:6;7521:9;7517:22;7496:53;;7572:491;;;;7710:2;7698:9;7689:7;7685:23;7681:32;7678:2;;;7726:1;7723;7716:12;7678:2;7761:1;7778:53;7823:7;7803:9;7778:53;;;7768:63;;7740:97;7868:2;7886:53;7931:7;7922:6;7911:9;7907:22;7886:53;;;7876:63;;7847:98;7976:2;7994:53;8039:7;8030:6;8019:9;8015:22;7994:53;;;7984:63;;7955:98;7672:391;;;;;;8070:509;;;;8217:2;8205:9;8196:7;8192:23;8188:32;8185:2;;;8233:1;8230;8223:12;8185:2;8268:1;8285:53;8330:7;8310:9;8285:53;;;8275:63;;8247:97;8375:2;8393:53;8438:7;8429:6;8418:9;8414:22;8393:53;;;8383:63;;8354:98;8483:2;8501:62;8555:7;8546:6;8535:9;8531:22;8501:62;;8586:491;;;;8724:2;8712:9;8703:7;8699:23;8695:32;8692:2;;;8740:1;8737;8730:12;8692:2;8775:1;8792:53;8837:7;8817:9;8792:53;;;8782:63;;8754:97;8882:2;8900:53;8945:7;8936:6;8925:9;8921:22;8900:53;;;8890:63;;8861:98;8990:2;9008:53;9053:7;9044:6;9033:9;9029:22;9008:53;;9084:617;;;;;9239:3;9227:9;9218:7;9214:23;9210:33;9207:2;;;9256:1;9253;9246:12;9207:2;9291:1;9308:53;9353:7;9333:9;9308:53;;;9298:63;;9270:97;9398:2;9416:53;9461:7;9452:6;9441:9;9437:22;9416:53;;;9406:63;;9377:98;9506:2;9524:53;9569:7;9560:6;9549:9;9545:22;9524:53;;;9514:63;;9485:98;9614:2;9632:53;9677:7;9668:6;9657:9;9653:22;9632:53;;;9622:63;;9593:98;9201:500;;;;;;;;9708:743;;;;;;9880:3;9868:9;9859:7;9855:23;9851:33;9848:2;;;9897:1;9894;9887:12;9848:2;9932:1;9949:53;9994:7;9974:9;9949:53;;;9939:63;;9911:97;10039:2;10057:53;10102:7;10093:6;10082:9;10078:22;10057:53;;;10047:63;;10018:98;10147:2;10165:53;10210:7;10201:6;10190:9;10186:22;10165:53;;;10155:63;;10126:98;10255:2;10273:53;10318:7;10309:6;10298:9;10294:22;10273:53;;;10263:63;;10234:98;10363:3;10382:53;10427:7;10418:6;10407:9;10403:22;10382:53;;10458:991;;;;;;;10717:2;10705:9;10696:7;10692:23;10688:32;10685:2;;;10733:1;10730;10723:12;10685:2;10768:31;;-1:-1;;;;;10808:30;;10805:2;;;10851:1;10848;10841:12;10805:2;10879:80;10951:7;10942:6;10931:9;10927:22;10879:80;;;10869:90;;;;10747:218;11024:2;11013:9;11009:18;10996:32;-1:-1;;;;;11040:6;11037:30;11034:2;;;11080:1;11077;11070:12;11034:2;11108:88;11188:7;11179:6;11168:9;11164:22;11108:88;;;11098:98;;;;10975:227;11261:2;11250:9;11246:18;11233:32;-1:-1;;;;;11277:6;11274:30;11271:2;;;11317:1;11314;11307:12;11271:2;11345:88;11425:7;11416:6;11405:9;11401:22;11345:88;;;11335:98;;;;11212:227;10679:770;;;;;;;;;11456:528;;;;11615:2;11603:9;11594:7;11590:23;11586:32;11583:2;;;11631:1;11628;11621:12;11583:2;11666:1;11683:72;11747:7;11727:9;11683:72;;11991:618;;;;;12152:2;12140:9;12131:7;12127:23;12123:32;12120:2;;;12168:1;12165;12158:12;12120:2;12203:31;;-1:-1;;;;;12243:30;;12240:2;;;12286:1;12283;12276:12;12240:2;12314:65;12371:7;12362:6;12351:9;12347:22;12314:65;;;12304:75;;;;12182:203;12444:2;12433:9;12429:18;12416:32;-1:-1;;;;;12460:6;12457:30;12454:2;;;12500:1;12497;12490:12;12454:2;12528:65;12585:7;12576:6;12565:9;12561:22;12528:65;;;12114:495;;;;-1:-1;12518:75;-1:-1;;;;12114:495;12616:241;;12720:2;12708:9;12699:7;12695:23;12691:32;12688:2;;;12736:1;12733;12726:12;12688:2;12771:1;12788:53;12833:7;12813:9;12788:53;;12864:263;;12979:2;12967:9;12958:7;12954:23;12950:32;12947:2;;;12995:1;12992;12985:12;12947:2;13030:1;13047:64;13103:7;13083:9;13047:64;;13134:366;;;13255:2;13243:9;13234:7;13230:23;13226:32;13223:2;;;13271:1;13268;13261:12;13223:2;13306:1;13323:53;13368:7;13348:9;13323:53;;13507:399;;;13639:2;13627:9;13618:7;13614:23;13610:32;13607:2;;;13655:1;13652;13645:12;13607:2;13690:1;13707:64;13763:7;13743:9;13707:64;;;13697:74;;13669:108;13808:2;13826:64;13882:7;13873:6;13862:9;13858:22;13826:64;;13913:239;;14016:2;14004:9;13995:7;13991:23;13987:32;13984:2;;;14032:1;14029;14022:12;13984:2;14067:1;14084:52;14128:7;14108:9;14084:52;;14159:485;;;;14294:2;14282:9;14273:7;14269:23;14265:32;14262:2;;;14310:1;14307;14300:12;14262:2;14345:1;14362:52;14406:7;14386:9;14362:52;;;14352:62;;14324:96;14451:2;14469:52;14513:7;14504:6;14493:9;14489:22;14469:52;;;14459:62;;14430:97;14558:2;14576:52;14620:7;14611:6;14600:9;14596:22;14576:52;;14652:173;;14739:46;14781:3;14773:6;14739:46;;;-1:-1;;14814:4;14805:14;;14732:93;14833:137;14932:32;14958:5;14932:32;;;14927:3;14920:45;14914:56;;;15130:660;15263:52;15309:5;15263:52;;;15328:84;15405:6;15400:3;15328:84;;;15321:91;;15433:54;15481:5;15433:54;;;15507:7;15535:1;15520:258;15545:6;15542:1;15539:13;15520:258;;;15612:6;15606:13;15633:63;15692:3;15677:13;15633:63;;;15626:70;;15713:58;15764:6;15713:58;;;15703:68;-1:-1;;15567:1;15560:9;15520:258;;15798:104;15875:21;15890:5;15875:21;;15909:148;16008:43;16027:23;16044:5;16027:23;;;16008:43;;16064:113;16147:24;16165:5;16147:24;;16184:152;16285:45;16305:24;16323:5;16305:24;;16343:335;;16449:34;16477:5;16449:34;;;16495:70;16558:6;16553:3;16495:70;;;16488:77;;16570:52;16615:6;16610:3;16603:4;16596:5;16592:16;16570:52;;;16643:29;16665:6;16643:29;;;16634:39;;;;16429:249;-1:-1;;;16429:249;16708:818;;16825:5;16819:12;16859:1;16848:9;16844:17;16872:1;16867:247;;;;17125:1;17120:400;;;;16837:683;;16867:247;16945:4;16941:1;16930:9;16926:17;16922:28;16964:70;17027:6;17022:3;16964:70;;;-1:-1;;17053:25;;17041:38;;16957:77;-1:-1;;17102:4;17093:14;;;-1:-1;16867:247;;17120:400;17189:1;17178:9;17174:17;17205:70;17268:6;17263:3;17205:70;;;17198:77;;17297:37;17328:5;17297:37;;;17350:1;17358:130;17372:6;17369:1;17366:13;17358:130;;;17431:14;;17418:11;;;17411:35;17478:1;17465:15;;;;17394:4;17387:12;17358:130;;;17502:11;;;-1:-1;;;16837:683;;16795:731;;;;;;17534:164;17636:56;17686:5;17636:56;;17705:140;17795:44;17833:5;17795:44;;17852:142;17943:45;17982:5;17943:45;;18001:142;18092:45;18131:5;18092:45;;18175:300;;18291:71;18355:6;18350:3;18291:71;;;18284:78;;18374:43;18410:6;18405:3;18398:5;18374:43;;;18439:29;18461:6;18439:29;;19167:332;;19327:67;19391:2;19386:3;19327:67;;;19427:34;19407:55;;19490:2;19481:12;;19313:186;-1:-1;;19313:186;19508:323;;19668:67;19732:2;19727:3;19668:67;;;19768:25;19748:46;;19822:2;19813:12;;19654:177;-1:-1;;19654:177;19840:321;;20000:67;20064:2;20059:3;20000:67;;;-1:-1;;;20080:44;;20152:2;20143:12;;19986:175;-1:-1;;19986:175;20170:324;;20330:67;20394:2;20389:3;20330:67;;;20430:26;20410:47;;20485:2;20476:12;;20316:178;-1:-1;;20316:178;20503:324;;20663:67;20727:2;20722:3;20663:67;;;20763:26;20743:47;;20818:2;20809:12;;20649:178;-1:-1;;20649:178;20836:316;;20996:67;21060:2;21055:3;20996:67;;;-1:-1;;;21076:39;;21143:2;21134:12;;20982:170;-1:-1;;20982:170;21161:317;;21321:67;21385:2;21380:3;21321:67;;;-1:-1;;;21401:40;;21469:2;21460:12;;21307:171;-1:-1;;21307:171;21487:330;;21647:67;21711:2;21706:3;21647:67;;;21747:32;21727:53;;21808:2;21799:12;;21633:184;-1:-1;;21633:184;21826:329;;21986:67;22050:2;22045:3;21986:67;;;22086:31;22066:52;;22146:2;22137:12;;21972:183;-1:-1;;21972:183;22164:317;;22324:67;22388:2;22383:3;22324:67;;;-1:-1;;;22404:40;;22472:2;22463:12;;22310:171;-1:-1;;22310:171;22490:323;;22650:67;22714:2;22709:3;22650:67;;;22750:25;22730:46;;22804:2;22795:12;;22636:177;-1:-1;;22636:177;22822:326;;22982:67;23046:2;23041:3;22982:67;;;23082:28;23062:49;;23139:2;23130:12;;22968:180;-1:-1;;22968:180;23157:317;;23317:67;23381:2;23376:3;23317:67;;;-1:-1;;;23397:40;;23465:2;23456:12;;23303:171;-1:-1;;23303:171;23483:317;;23643:67;23707:2;23702:3;23643:67;;;-1:-1;;;23723:40;;23791:2;23782:12;;23629:171;-1:-1;;23629:171;23809:328;;23969:67;24033:2;24028:3;23969:67;;;24069:30;24049:51;;24128:2;24119:12;;23955:182;-1:-1;;23955:182;24146:320;;24306:67;24370:2;24365:3;24306:67;;;-1:-1;;;24386:43;;24457:2;24448:12;;24292:174;-1:-1;;24292:174;24475:324;;24635:67;24699:2;24694:3;24635:67;;;24735:26;24715:47;;24790:2;24781:12;;24621:178;-1:-1;;24621:178;24808:327;;24968:67;25032:2;25027:3;24968:67;;;25068:29;25048:50;;25126:2;25117:12;;24954:181;-1:-1;;24954:181;25144:312;;25304:67;25368:2;25363:3;25304:67;;;-1:-1;;;25384:35;;25447:2;25438:12;;25290:166;-1:-1;;25290:166;25465:323;;25625:67;25689:2;25684:3;25625:67;;;25725:25;25705:46;;25779:2;25770:12;;25611:177;-1:-1;;25611:177;25797:331;;25957:67;26021:2;26016:3;25957:67;;;26057:33;26037:54;;26119:2;26110:12;;25943:185;-1:-1;;25943:185;26137:322;;26297:67;26361:2;26356:3;26297:67;;;-1:-1;;;26377:45;;26450:2;26441:12;;26283:176;-1:-1;;26283:176;26468:331;;26628:67;26692:2;26687:3;26628:67;;;26728:33;26708:54;;26790:2;26781:12;;26614:185;-1:-1;;26614:185;26808:322;;26968:67;27032:2;27027:3;26968:67;;;-1:-1;;;27048:45;;27121:2;27112:12;;26954:176;-1:-1;;26954:176;27139:331;;27299:67;27363:2;27358:3;27299:67;;;27399:33;27379:54;;27461:2;27452:12;;27285:185;-1:-1;;27285:185;27479:325;;27639:67;27703:2;27698:3;27639:67;;;27739:27;27719:48;;27795:2;27786:12;;27625:179;-1:-1;;27625:179;27813:329;;27973:67;28037:2;28032:3;27973:67;;;28073:31;28053:52;;28133:2;28124:12;;27959:183;-1:-1;;27959:183;28151:330;;28311:67;28375:2;28370:3;28311:67;;;28411:32;28391:53;;28472:2;28463:12;;28297:184;-1:-1;;28297:184;28489:110;28570:23;28587:5;28570:23;;28836:110;28917:23;28934:5;28917:23;;28953:107;29032:22;29048:5;29032:22;;29067:124;29149:36;29179:5;29149:36;;29198:110;29279:23;29296:5;29279:23;;29315:517;;29488:73;29557:3;29548:6;29488:73;;;29583:1;29578:3;29574:11;29567:18;;29596:75;29667:3;29658:6;29596:75;;;29693:2;29688:3;29684:12;29677:19;;29707:75;29778:3;29769:6;29707:75;;;-1:-1;29804:2;29795:12;;29476:356;-1:-1;;;29476:356;29839:213;29957:2;29942:18;;29971:71;29946:9;30015:6;29971:71;;30059:305;30223:2;30208:18;;30237:117;30212:9;30327:6;30237:117;;30371:201;30483:2;30468:18;;30497:65;30472:9;30535:6;30497:65;;30579:643;30828:3;30813:19;;30843:65;30817:9;30881:6;30843:65;;;30919:118;31033:2;31022:9;31018:18;31009:6;30919:118;;;31048:80;31123:3;31112:9;31108:19;31099:6;31048:80;;;31139:73;31207:3;31196:9;31192:19;31183:6;31139:73;;31229:1243;31611:3;31596:19;;31626:65;31600:9;31664:6;31626:65;;;31702:66;31764:2;31753:9;31749:18;31740:6;31702:66;;;31779;31841:2;31830:9;31826:18;31817:6;31779:66;;;31856:80;31932:2;31921:9;31917:18;31908:6;31856:80;;;31947:71;32013:3;32002:9;31998:19;31989:6;31947:71;;;32029;32095:3;32084:9;32080:19;32071:6;32029:71;;;32111;32177:3;32166:9;32162:19;32153:6;32111:71;;;32193:89;32277:3;32266:9;32262:19;32253:6;32193:89;;;32293;32377:3;32366:9;32362:19;32353:6;32293:89;;;32393:69;32457:3;32446:9;32442:19;32433:6;32393:69;;;31582:890;;;;;;;;;;;;;;32479:435;32653:2;32638:18;;32667:71;32642:9;32711:6;32667:71;;;32749:72;32817:2;32806:9;32802:18;32793:6;32749:72;;;32832;32900:2;32889:9;32885:18;32876:6;32832:72;;32921:539;33119:3;33104:19;;33134:71;33108:9;33178:6;33134:71;;;33216:68;33280:2;33269:9;33265:18;33256:6;33216:68;;;33295:72;33363:2;33352:9;33348:18;33339:6;33295:72;;;33378;33446:2;33435:9;33431:18;33422:6;33378:72;;33467:291;33600:2;33614:47;;;33585:18;;33675:73;33585:18;33734:6;33675:73;;33765:545;33970:2;33955:18;;33984:90;33959:9;34047:6;33984:90;;;34085:70;34151:2;34140:9;34136:18;34127:6;34085:70;;;34203:9;34197:4;34193:20;34188:2;34177:9;34173:18;34166:48;34228:72;34295:4;34286:6;34228:72;;34317:227;34442:2;34427:18;;34456:78;34431:9;34507:6;34456:78;;34551:338;34704:2;34689:18;;34718:78;34693:9;34769:6;34718:78;;;34807:72;34875:2;34864:9;34860:18;34851:6;34807:72;;34896:755;35146:3;35131:19;;35161:79;35135:9;35213:6;35161:79;;;35251:70;35317:2;35306:9;35302:18;35293:6;35251:70;;;35332;35398:2;35387:9;35383:18;35374:6;35332:70;;;35413:66;35475:2;35464:9;35460:18;35451:6;35413:66;;;35490:67;35552:3;35541:9;35537:19;35528:6;35490:67;;;35568:73;35636:3;35625:9;35621:19;35612:6;35568:73;;;35117:534;;;;;;;;;;35658:313;35802:2;35816:47;;;35787:18;;35877:84;35787:18;35947:6;35939;35877:84;;36306:301;36444:2;36458:47;;;36429:18;;36519:78;36429:18;36583:6;36519:78;;36614:407;36805:2;36819:47;;;36790:18;;36880:131;36790:18;36880:131;;37028:407;37219:2;37233:47;;;37204:18;;37294:131;37204:18;37294:131;;37442:407;37633:2;37647:47;;;37618:18;;37708:131;37618:18;37708:131;;37856:407;38047:2;38061:47;;;38032:18;;38122:131;38032:18;38122:131;;38270:407;38461:2;38475:47;;;38446:18;;38536:131;38446:18;38536:131;;38684:407;38875:2;38889:47;;;38860:18;;38950:131;38860:18;38950:131;;39098:407;39289:2;39303:47;;;39274:18;;39364:131;39274:18;39364:131;;39512:407;39703:2;39717:47;;;39688:18;;39778:131;39688:18;39778:131;;39926:407;40117:2;40131:47;;;40102:18;;40192:131;40102:18;40192:131;;40340:407;40531:2;40545:47;;;40516:18;;40606:131;40516:18;40606:131;;40754:407;40945:2;40959:47;;;40930:18;;41020:131;40930:18;41020:131;;41168:407;41359:2;41373:47;;;41344:18;;41434:131;41344:18;41434:131;;41582:407;41773:2;41787:47;;;41758:18;;41848:131;41758:18;41848:131;;41996:407;42187:2;42201:47;;;42172:18;;42262:131;42172:18;42262:131;;42410:407;42601:2;42615:47;;;42586:18;;42676:131;42586:18;42676:131;;42824:407;43015:2;43029:47;;;43000:18;;43090:131;43000:18;43090:131;;43238:407;43429:2;43443:47;;;43414:18;;43504:131;43414:18;43504:131;;43652:407;43843:2;43857:47;;;43828:18;;43918:131;43828:18;43918:131;;44066:407;44257:2;44271:47;;;44242:18;;44332:131;44242:18;44332:131;;44480:407;44671:2;44685:47;;;44656:18;;44746:131;44656:18;44746:131;;44894:407;45085:2;45099:47;;;45070:18;;45160:131;45070:18;45160:131;;45308:407;45499:2;45513:47;;;45484:18;;45574:131;45484:18;45574:131;;45722:407;45913:2;45927:47;;;45898:18;;45988:131;45898:18;45988:131;;46136:407;46327:2;46341:47;;;46312:18;;46402:131;46312:18;46402:131;;46550:407;46741:2;46755:47;;;46726:18;;46816:131;46726:18;46816:131;;46964:407;47155:2;47169:47;;;47140:18;;47230:131;47140:18;47230:131;;47378:407;47569:2;47583:47;;;47554:18;;47644:131;47554:18;47644:131;;47792:407;47983:2;47997:47;;;47968:18;;48058:131;47968:18;48058:131;;48206:665;48439:3;48424:19;;48454:69;48428:9;48496:6;48454:69;;;48534:72;48602:2;48591:9;48587:18;48578:6;48534:72;;;48617;48685:2;48674:9;48670:18;48661:6;48617:72;;;48700:79;48775:2;48764:9;48760:18;48751:6;48700:79;;;48790:71;48856:3;48845:9;48841:19;48832:6;48790:71;;;48410:461;;;;;;;;;48878:213;48996:2;48981:18;;49010:71;48985:9;49054:6;49010:71;;49098:402;49259:2;49244:18;;49273:71;49248:9;49317:6;49273:71;;;49392:9;49386:4;49382:20;49377:2;49366:9;49362:18;49355:48;49417:73;49485:4;49476:6;49417:73;;49507:209;49623:2;49608:18;;49637:69;49612:9;49679:6;49637:69;;49723:211;49840:2;49825:18;;49854:70;49829:9;49897:6;49854:70;;49941:320;50085:2;50070:18;;50099:69;50074:9;50141:6;50099:69;;;50179:72;50247:2;50236:9;50232:18;50223:6;50179:72;;50268:322;50413:2;50398:18;;50427:70;50402:9;50470:6;50427:70;;50701:157;;50795:14;;;50837:4;50824:18;;;50754:104;50865:108;-1:-1;50959:4;;50937:36;50980:117;51063:12;;51034:63;51233:106;51329:4;51320:14;;51306:33;51496:162;51598:19;;;51647:4;51638:14;;51591:67;51838:91;;51900:24;51918:5;51900:24;;52042:85;52108:13;52101:21;;52084:43;52134:144;-1:-1;;;;;;52195:78;;52178:100;52364:110;;52445:24;52463:5;52445:24;;52481:124;52552:5;52558:42;52552:5;52558:42;;52612:126;52684:5;52690:43;52684:5;52690:43;;52745:126;52817:5;52823:43;52817:5;52823:43;;52878:84;52950:6;52939:18;;52922:40;52969:121;-1:-1;;;;;53031:54;;53014:76;53176:96;-1:-1;;;;;53237:30;;53220:52;53279:81;53350:4;53339:16;;53322:38;53367:104;-1:-1;;;;;53428:38;;53411:60;53778:124;;53864:33;53891:5;53864:33;;53909:126;;53996:34;54024:5;53996:34;;54042:126;;54129:34;54157:5;54129:34;;54175:106;;54253:23;54270:5;54253:23;;54289:145;54370:6;54365:3;54360;54347:30;-1:-1;54426:1;54408:16;;54401:27;54340:94;54443:268;54508:1;54515:101;54529:6;54526:1;54523:13;54515:101;;;54596:11;;;54590:18;54577:11;;;54570:39;54551:2;54544:10;54515:101;;;54631:6;54628:1;54625:13;54622:2;;;54696:1;54687:6;54682:3;54678:16;54671:27;54622:2;54492:219;;;;;54880:97;54968:2;54948:14;-1:-1;;54944:28;;54928:49;54985:100;55063:1;55056:5;55053:12;55043:2;;55069:9;55092:101;55171:1;55164:5;55161:12;55151:2;;55177:9;55200:101;55279:1;55272:5;55269:12;55259:2;;55285:9;55308:117;55377:24;55395:5;55377:24;;;55370:5;55367:35;55357:2;;55416:1;55413;55406:12;55572:155;55660:43;55697:5;55660:43;;55734:103;55812:1;55805:5;55802:12;55792:2;;55828:1;55825;55818:12;55844:104;55923:1;55916:5;55913:12;55903:2;;55939:1;55936;55929:12;55955:117;56024:24;56042:5;56024:24;;56079:115;56147:23;56164:5;56147:23;

Swarm Source

bzzr://590606406739dd1c71a5083187f4563207095773c469e460b371ac02ef05e783
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.