solc-0.8.36-doubleshift20 0x8b0e044e364f2ce913799d53b300e15a6974dc97 optimized

20461 bytes

608060405234801561000f575f5ffd5b50600436106101c6575f3560e01c806374e750bb116100fe578063aaed87a31161009e578063dc4c90d31161006e578063dc4c90d3146105d3578063dc98354e146105fa578063e1b4af69146105ab578063fdff9b4d1461060d575f5ffd5b8063aaed87a31461054d578063b47b2fb114610575578063b6a8b0fa146105ab578063c4e833ce146105be575f5ffd5b80638e0dc28d116100d95780638e0dc28d146105065780639f063efc146103ff578063a5e90eee14610519578063a70354a114610527575f5ffd5b806374e750bb1461046957806374f792fa146104cc57806379d8353b146104df575f5ffd5b8063259982e51161016957806369ef73171161014457806369ef7317146103ea5780636c2bbe7e146103ff5780636fe7e6eb146104325780637165485d14610445575f5ffd5b8063259982e514610358578063575e24b41461038457806367e4ac2c146103c2575f5ffd5b80630902f1ac116101a45780630902f1ac1461023b5780630cf6c4611461026f578063182148ef1461028257806321d0ee7014610358575f5ffd5b8063022c0d9f146101ca57806304c785bc146101df57806307d3277f146101fc575b5f5ffd5b6101dd6101d83660046143ca565b610657565b005b6101e76108f2565b60405190151581526020015b60405180910390f35b6102237f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101f3565b6102436109d8565b604080516001600160701b03948516815293909216602084015263ffffffff16908201526060016101f3565b6101dd61027d36600461442e565b610a57565b6103056040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152506040805160a0810182525f546001600160a01b039081168252600154808216602084015262ffffff600160a01b82041693830193909352600160b81b909204600290810b606083015254909116608082015290565b6040516101f3919081516001600160a01b03908116825260208084015182169083015260408084015162ffffff169083015260608084015160020b90830152608092830151169181019190915260a00190565b61036b610366366004614499565b610a63565b6040516001600160e01b031990911681526020016101f3565b610397610392366004614502565b610ac4565b604080516001600160e01b03199094168452602084019290925262ffffff16908201526060016101f3565b6103ca610b2e565b604080516001600160a01b039384168152929091166020830152016101f3565b6103f2610c05565b6040516101f3919061455b565b61041261040d3660046146b9565b610c1a565b604080516001600160e01b031990931683526020830191909152016101f3565b61036b610440366004614751565b610c84565b61045b6b22bab632b929bbb0b8103b1960a11b81565b6040519081526020016101f3565b610471610ce5565b6040516101f3919081516001600160a01b03908116825260208084015182169083015260408084015182169083015260608084015182169083015260808084015182169083015260a092830151169181019190915260c00190565b6101dd6104da36600461442e565b610cf5565b6102237f000000000000000000000000000000000000000000000000000000000000000081565b61045b6105143660046147b7565b610d0d565b6101dd61027d3660046147fc565b7f0000000000000000000000000000000000000000000000000000000000000000610223565b61056061055b366004614833565b610da7565b604080519283526020830191909152016101f3565b61058861058336600461485f565b610f50565b604080516001600160e01b03199093168352600f9190910b6020830152016101f3565b61036b6105b93660046148df565b610fb8565b6105c661101b565b6040516101f39190614938565b6102237f000000000000000000000000000000000000000000000000000000000000000081565b61036b610608366004614a52565b6110ff565b6101e761061b366004614a99565b6001600160a01b03165f9081527f10ee9b31f73104ff2cf413742414a498e1f7b56c11cb512bca58a9c50727bb59602052604090205460ff1690565b61065f61115e565b5f5f516020614fcd5f395f51905f528054909150600160e01b900463ffffffff166001146106a0576040516303cb96db60e21b815260040160405180910390fd5b80546001600160e01b0316600160e11b1781556001600160701b0386118015906106d157506001600160701b038511155b6106ee57604051636b2f218360e01b815260040160405180910390fd5b5f6107427f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061073c6111ea565b886112aa565b61014081018890526101608101879052905061075d81611425565b6107668161153c565b82156107d5576001600160a01b038516638f536f3e6107836111ea565b898988886040518663ffffffff1660e01b81526004016107a7959493929190614ab4565b5f604051808303815f87803b1580156107be575f5ffd5b505af11580156107d0573d5f5f3e3d5ffd5b505050505b60808101516040516370a0823160e01b81523060048201526108c59183916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610823573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108479190614aff565b60a08401516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561088f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108b39190614aff565b61010083019190915261012090910152565b6108ce81611554565b6108d781611569565b5080546001600160e01b0316600160e01b1790555050505050565b5f516020614fcd5f395f51905f5280545f9190600160e01b900463ffffffff16600203610932576040516303cb96db60e21b815260040160405180910390fd5b5f61093b611729565b6080810151604051630b23949560e11b81526001600160a01b0391821660048201523060248201529192507f00000000000000000000000000000000000000000000000000000000000000001690631647292a90604401602060405180830381865afa1580156109ad573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d19190614b16565b9250505090565b5f8080805f516020614fcd5f395f51905f528054909150600160e01b900463ffffffff16600203610a1c576040516303cb96db60e21b815260040160405180910390fd5b50505f516020614fcd5f395f51905f52546001600160701b0380821694600160701b83049091169350600160e01b90910463ffffffff169150565b610a5f611770565b5050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610aad5760405163570c108560e11b815260040160405180910390fd5b610aba86868686866117f8565b9695505050505050565b5f8080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b105760405163570c108560e11b815260040160405180910390fd5b610b1d8888888888611812565b925092509250955095509592505050565b5f5f5f610b39611729565b9050805f015160601b60601c6338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b77573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9b9190614b31565b9250806020015160601b60601c6338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bda573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bfe9190614b31565b9150509091565b610c0d614259565b610c15611c83565b905090565b5f80336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c655760405163570c108560e11b815260040160405180910390fd5b610c7489898989898989611e08565b9150915097509795505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cce5760405163570c108560e11b815260040160405180910390fd5b610cda858585856117f8565b90505b949350505050565b610ced6142c4565b610c15611729565b610cfd611770565b610a5f610d08611729565b611e23565b5f516020614fcd5f395f51905f5280545f9190600160e01b900463ffffffff16600203610d4d576040516303cb96db60e21b815260040160405180910390fd5b5f610d56611729565b90505f610d61611c83565b9050610d9b7f00000000000000000000000000000000000000000000000000000000000000008383610d94868d8d6120c2565b8a8a612213565b98975050505050505050565b5f516020614fcd5f395f51905f5280545f918291600160e01b900463ffffffff16600203610de8576040516303cb96db60e21b815260040160405180910390fd5b5f610df1611729565b90505f610dfc611c83565b6080830151604051630b23949560e11b81526001600160a01b0391821660048201523060248201529192507f00000000000000000000000000000000000000000000000000000000000000001690631647292a90604401602060405180830381865afa158015610e6e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e929190614b16565b610ea3575f5f945094505050610f48565b61014081015164ffffffffff1615801590610eca57504281610140015164ffffffffff1611155b15610edc575f5f945094505050610f48565b5f610ee88389896120c2565b90505f610ef5838361244f565b6001600160401b03169050670de0b6b3a76400008110610f1e575f5f9650965050505050610f48565b610f2a848484846125c2565b90975095508515610f435785610f3f81614b60565b9650505b505050505b509250929050565b5f80336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f9b5760405163570c108560e11b815260040160405180910390fd5b610fa9888888888888611e08565b91509150965096945050505050565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110025760405163570c108560e11b815260040160405180910390fd5b6110108787878787876117f8565b979650505050505050565b604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915250604080516101c08101825260018082525f60208301819052928201819052606082018390526080820183905260a0820183905260c0820181905260e0820183905261010082018190526101208201839052610140820152610160810182905261018081018290526101a081019190915290565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111495760405163570c108560e11b815260040160405180910390fd5b6111548484846117f8565b90505b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03811633036111925750565b631f8b521560e01b5f52306004523360245234604452608060645236608452365f60a4375f3660a401525f5f601f19601f36011660a4015f34855af13d5f5f3e8080156111e15760403d036040f35b3d5ffd5b505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681036112a557604051630c281d0f60e11b81525f60048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906318503a1e906024016040805180830381865afa15801561127d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112a19190614b75565b5090505b919050565b6112b26142f8565b6001600160a01b038086168252841660208201526112ce611729565b60408201526112db611c83565b816060018190525080604001515f015160601b60601c6338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611323573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113479190614b31565b6001600160a01b03908116608083015260408083015160209081015182516338d52e0f60e01b815292519316926338d52e0f9260048082019392918290030181865afa158015611399573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bd9190614b31565b6001600160a01b0390811660a083015283811660c0830152821660e08201526060810151610140015164ffffffffff1615806114085750428160600151610140015164ffffffffff16115b610cdd57604051630407b05b60e31b815260040160405180910390fd5b606081015161016001516001165f0361143b5750565b6060810151610180015161014082015161016083015160c084015160e0850151604051602481019490945260448401929092526001600160a01b03908116606484015290811660848301525f92839291169060a40160408051601f198184030181529181526020820180516001600160e01b03166337b9cd0d60e11b179052516114c59190614ba2565b5f604051808303815f865af19150503d805f81146114fe576040519150601f19603f3d011682016040523d82523d5f602084013e611503565b606091505b5090925090506001818361153557604051630351728360e61b815260040161152c929190614be6565b60405180910390fd5b5050505050565b611546815f612ba7565b611551816001612ba7565b50565b61155f816001612c1f565b611551815f612c1f565b5f5f516020614fcd5f395f51905f5261014083015161018084015182549293505f9261159e91906001600160701b0316614c01565b6115a89190614c14565b6101608401516101a085015184549293505f926115d59190600160701b90046001600160701b0316614c01565b6115df9190614c14565b90506115f084606001518383612e7e565b61160d5760405163d93c670b60e01b815260040160405180910390fd5b82546001600160701b03828116600160701b026001600160e01b0319909216908416171783556101808401516101008501515f9161164a91614c14565b90505f856101a001518661012001516116639190614c14565b60e08781015160c0808a01516101808b01516101a08c01516101408d01516101608e01518d546040805195865260208601949094529284019190915260608301526080820189905260a082018790526001600160701b0380821694830194909452600160701b9004909216938201939093529293506001600160a01b03908116929116907f8337ab1cd063c6a0121e4b67ad00ec5640783101bb89ad879ffb0fe28b503e95906101000160405180910390a361172186868484612fc6565b505050505050565b6117316142c4565b60c03610156117535760405163a7c1249960e01b815260040160405180910390fd5b6117633660bf198101815f614c27565b810190610c159190614c92565b5f5f7f000000000000000000000000000000000000000000000000000000000000000060601b60601c5f366040516117a9929190614d3c565b5f60405180830381855af49150503d805f81146117e1576040519150601f19603f3d011682016040523d82523d5f602084013e6117e6565b606091505b509150915081610a5f57805181602001fd5b5f604051630a85dc2960e01b815260040160405180910390fd5b5f8080805f516020614fcd5f395f51905f528054909150600160e01b900463ffffffff16600114611856576040516303cb96db60e21b815260040160405180910390fd5b80546001600160e01b0316600160e11b1781555f6118b67f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008c336112aa565b90505f808060208b013581138015611926576118d560208d0135614d4b565b935061191f7f0000000000000000000000000000000000000000000000000000000000000000866040015187606001518f5f0160208101906119179190614d65565b886001612213565b9250611977565b8b6020013592506119747f0000000000000000000000000000000000000000000000000000000000000000866040015187606001518f5f01602081019061196d9190614d65565b875f612213565b93505b61198460208d018d614d65565b156119ac575f610140860152610160850183905261010085018490525f6101208601526119cb565b61014085018390525f6101608601525f61010086015261012085018490525b6119d485611425565b80611a0f57611a0a6119e584613148565b6119ee90614d80565b6119f786613148565b6001600160801b031660809190911b1790565b611a2d565b611a2d611a1b85613148565b611a2485613148565b6119f790614d80565b91506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630b0d9c09611a6b60208f018f614d65565b611a87578e6020016020810190611a829190614a99565b611a99565b8e5f016020810190611a999190614a99565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018790526064015f604051808303815f87803b158015611ae4575f5ffd5b505af1158015611af6573d5f5f3e3d5ffd5b50505050611b0385611554565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a5841194611b3f60208f018f614d65565b611b5a578e5f016020810190611b559190614a99565b611b6d565b8e6020016020810190611b6d9190614a99565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024015f604051808303815f87803b158015611bab575f5ffd5b505af1158015611bbd573d5f5f3e3d5ffd5b50505050611bca8561153c565b7f000000000000000000000000000000000000000000000000000000000000000060601b60601c6311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611c24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c489190614aff565b50611c5285611569565b5084546001600160e01b0316600160e01b17909455506315d7892d60e21b9b929a505f995091975050505050505050565b611c8b614259565b50604080516101a0810182527fca4da3477ca592c011a91679daaaf19e95f02a3a91537965b17e4113575fb219546001600160701b038082168352600160701b91829004811660208401527fca4da3477ca592c011a91679daaaf19e95f02a3a91537965b17e4113575fb21a5480821694840194909452920490911660608201527fca4da3477ca592c011a91679daaaf19e95f02a3a91537965b17e4113575fb21b546001600160501b038082166080840152600160501b82041660a0830152600160a01b90046001600160401b0390811660c08301527fca4da3477ca592c011a91679daaaf19e95f02a3a91537965b17e4113575fb21c5480821660e08401526801000000000000000081048216610100840152600160801b8104909116610120830152600160c01b810464ffffffffff16610140830152600160e81b900460ff166101608201527fca4da3477ca592c011a91679daaaf19e95f02a3a91537965b17e4113575fb21d546001600160a01b031661018082015290565b5f5f604051630a85dc2960e01b815260040160405180910390fd5b5f5f516020614fcd5f395f51905f528054909150600160e01b900463ffffffff16600114611e64576040516303cb96db60e21b815260040160405180910390fd5b80546001600160e01b0316600160e11b1781557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316156120ac57611eb730611eb261101b565b613168565b5f825f015160601b60601c6338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ef4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f189190614b31565b90505f836020015160601b60601c6338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f58573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7c9190614b31565b6040805160a080820183526001600160a01b03868116808452858216602085018190525f85870181905260016060870181905230608090970187905281546001600160a01b0319908116851790925580546001600160d01b031916909217600160b81b17918290556002805490911686178155955163313b65df60e11b8152600481019290925280831660248301529283901c62ffffff16604482015260b89290921c90930b60648201526084810191909152600160601b60a48201529192507f00000000000000000000000000000000000000000000000000000000000000001690636276cbbe9060c4016020604051808303815f875af1158015612084573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120a89190614dad565b5050505b80546001600160e01b0316600160e01b17905550565b5f5f845f015160601b60601c6338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612100573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121249190614b31565b90505f856020015160601b60601c6338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612164573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121889190614b31565b90506001600160a01b038581169083161480156121b057506001600160a01b03848116908216145b156121be576001925061220a565b6001600160a01b038581169082161480156121e457506001600160a01b03848116908316145b156121f1575f925061220a565b604051634617192b60e01b815260040160405180910390fd5b50509392505050565b5f825f0361222257505f610aba565b6001600160701b0383111561224a57604051630e8d18f560e31b815260040160405180910390fd5b6080860151604051630b23949560e11b81526001600160a01b03918216600482015230602482015290881690631647292a90604401602060405180830381865afa15801561229a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122be9190614b16565b6122db5760405163715756a960e01b815260040160405180910390fd5b61014085015164ffffffffff1615806122ff57504285610140015164ffffffffff16115b61231c57604051630407b05b60e31b815260040160405180910390fd5b5f612327868661244f565b6001600160401b03169050670de0b6b3a7640000811061235a57604051631f77084960e01b815260040160405180910390fd5b5f5f612368898989866125c2565b91509150841561239c57670de0b6b3a76400006123858488614dc8565b61238f9190614ddf565b6123999087614c14565b95505b5f6123a98988888b6132b4565b905085156123e3578287111580156123c15750818111155b6123de57604051630e8d18f560e31b815260040160405180910390fd5b612441565b8187111580156123f35750828111155b61241057604051630e8d18f560e31b815260040160405180910390fd5b61242284670de0b6b3a7640000614c14565b61243482670de0b6b3a7640000614dc8565b61243e9190614ddf565b90505b9a9950505050505050505050565b6101608201516001600160401b039060021615612589575f5f516020614fcd5f395f51905f52610180850151815460405186151560248201526001600160701b038083166044830152600160701b9092049091166064820152600160848201529192505f9182916001600160a01b03169060a40160408051601f198184030181529181526020820180516001600160e01b031663b7788faf60e01b179052516124f89190614ba2565b5f60405180830381855afa9150503d805f8114612530576040519150601f19603f3d011682016040523d82523d5f602084013e612535565b606091505b509150915081801561254957506020815110155b600282909161256d57604051630351728360e61b815260040161152c929190614be6565b5050808060200190518101906125839190614e14565b93505050505b67fffffffffffffffe196001600160401b038216016125bc57816125b2578261012001516125b9565b8261010001515b90505b92915050565b60808401515f9081905f516020614fcd5f395f51905f52906001600160701b0390819084886125f5578a602001516125f8565b8a515b90505f8961260a578b60600151612610565b8b604001515b60405163402d267d60e01b81526001600160a01b0385811660048301529192505f9184169063402d267d90602401602060405180830381865afa158015612659573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267d9190614aff565b90506001600160a01b038216156127035760405163d283e75f60e01b81526001600160a01b03858116600483015283169063d283e75f90602401602060405180830381865afa1580156126d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126f69190614aff565b6127009082614c01565b90505b8581101561270f578095505b5050505f886127375760408a0151855461273291906001600160701b0316614e2d565b612758565b60608a015185546127589190600160701b90046001600160701b0316614e2d565b90506001600160701b038116831115612778576001600160701b03811692505b505f88612786578a5161278c565b8a602001515b90505f8961279e578b604001516127a4565b8b606001515b6040516370a0823160e01b81526001600160a01b0385811660048301529192505f918416906307a2d13a9082906370a0823190602401602060405180830381865afa1580156127f5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128199190614aff565b6040518263ffffffff1660e01b815260040161283791815260200190565b602060405180830381865afa158015612852573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128769190614aff565b90505f8360601b60601c63961be3916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d69190614aff565b9050808211806128f157506001600160a01b03848116908416145b156129075785811015612902578095505b61298f565b816001600160a01b03841615612981578360601b60601c63961be3916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612950573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129749190614aff565b61297e9082614c01565b90505b8681101561298d578096505b505b506001600160a01b03821615612aae575f8260601b60601c6318e22d986040518163ffffffff1660e01b81526004016040805180830381865afa1580156129d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129fc9190614e5d565b9150505f612a0d8261ffff16613541565b90505f198114612aab575f8460601b60601c6347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a759190614aff565b90505f828211612a8e57612a898284614c14565b612a90565b5f5b612a9a9086614c01565b905088811015612aa8578098505b50505b50505b5050505f612abe8a845f8c6132b4565b90506001600160701b038111612b0c5783811015612b0757612ae888670de0b6b3a7640000614c14565b612afa82670de0b6b3a7640000614dc8565b612b049190614ddf565b93505b612b97565b5f612b408b670de0b6b3a7640000612b248c82614c14565b612b2e9089614dc8565b612b389190614ddf565b60018d6132b4565b905083811015612b9557925082612b5f89670de0b6b3a7640000614c14565b612b6b8c865f8e6132b4565b612b7d90670de0b6b3a7640000614dc8565b612b879190614ddf565b915084821015612b95578194505b505b5091999098509650505050505050565b5f81612bb857826101400151612bbf565b8261016001515b9050805f03612bcd57505050565b6111e5835f015184604001516080015184612bed57604086015151612bf7565b8560400151602001515b85612c0a57866040015160400151612c14565b8660400151606001515b858860e00151613567565b5f81612c3057826101200151612c37565b8261010001515b9050805f03612c4557505050565b5f82612c55578360a00151612c5b565b83608001515b90505f612c6c856060015185613860565b6001600160401b03169050670de0b6b3a76400008110612c9f57604051631f77084960e01b815260040160405180910390fd5b5f670de0b6b3a7640000612cb38386614dc8565b612cbd9190614ddf565b60208701516040516302a64b8360e21b81523060048201529192505f9182916001600160a01b031690630a992e0c906024016040805180830381865afa158015612d09573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d2d9190614e8e565b91509150806001600160401b03165f14612d9f575f670de0b6b3a7640000612d5e6001600160401b03841686614dc8565b612d689190614ddf565b90508015612d9d57612d846001600160a01b0387168483613941565b612d8e8188614c14565b9650612d9a8185614c14565b93505b505b5050604086015160a001516001600160a01b031615801590612dc057508015155b15612df357604086015160a00151612de3906001600160a01b0385169083613941565b612ded8185614c14565b93505f90505b612e40865f015187604001516080015187612e1657886040015160200151612e1d565b6040890151515b88612e3057896040015160600151612e3a565b8960400151604001515b88613993565b9350808411612e4f575f612e59565b612e598185614c14565b93508415612e6e576101808601849052611721565b6101a08601849052505050505050565b5f6001600160701b03831180612e9a57506001600160701b0382115b15612ea657505f611157565b60408401516001600160701b0316831080612ecd575060608401516001600160701b031682105b15612ed957505f611157565b83516001600160701b03168310612f585760208401516001600160701b03168210612f0657506001611157565b612f4e828560a001516001600160501b031686608001516001600160501b0316876020015160901b60901c885f015160901b60901c8960e001516001600160401b0316613cea565b8310159050611157565b60208401516001600160701b0316821015612f7457505f611157565b612fbc8385608001516001600160501b03168660a001516001600160501b0316875f015160901b60901c886020015160901b60901c8960c001516001600160401b0316613cea565b8210159050611157565b6060840151610160015160041615613142578254600160e01b6001600160e01b03821617808555606086015161018090810151908701516101a08801516101408901516101608a015160c08b015160e08c0151604051602481019690965260448601949094526064850192909252608484015260a4830188905260c483018790526001600160a01b0390811660e48401529081166101048301526001600160701b03948516610124830152600160701b9093049093166101448401525f928392909116906101640160408051601f198184030181529181526020820180516001600160e01b0316630714f6d160e01b179052516130c39190614ba2565b5f604051808303815f865af19150503d805f81146130fc576040519150601f19603f3d011682016040523d82523d5f602084013e613101565b606091505b5090925090506004818361312a57604051630351728360e61b815260040161152c929190614be6565b505084546001600160e01b0316600160e11b17855550505b50505050565b5f6001607f1b8210613164576131646393dafdf160e01b613d6c565b5090565b805115156120008316151514158061318c5750602081015115156110008316151514155b806131a35750604081015115156108008316151514155b806131ba5750606081015115156104008316151514155b806131d15750608081015115156102008316151514155b806131e8575060a081015115156101008316151514155b806131fe575060c0810151151560808316151514155b80613214575060e0810151151560408316151514155b8061322b5750610100810151151560208316151514155b806132425750610120810151151560108316151514155b806132595750610140810151151560088316151514155b806132705750610160810151151560048316151514155b806132875750610180810151151560028316151514155b8061329e57506101a0810151151560018316151514155b15610a5f57610a5f630732d7b560e51b83613d74565b5f516020614fcd5f395f51905f528054608086015160a08701518751602089015160c08a015160e08b01515f97966001600160701b0380821697600160701b9092048116966001600160501b0392831696921694918116939116916001600160401b03918216911689808d15613407578c1561339c5761333d8f6001600160701b038c16614c01565b915085821161335b57613354828989898989613cea565b905061336c565b61336982888a888a88613d89565b90505b6001600160701b0389168110613382575f613395565b613395816001600160701b038b16614c14565b9b5061352e565b6133af8f6001600160701b038b16614c01565b90508481116133cd576133c681888a888a88613cea565b91506133de565b6133db818989898989613d89565b91505b6001600160701b038a1682106133f4575f613395565b613395826001600160701b038c16614c14565b8c1561349c576001600160701b0389168f10613431575f199b505050505050505050505050610cdd565b6134448f6001600160701b038b16614c14565b90508481116134625761345b81888a888a88613cea565b9150613473565b613470818989898989613d89565b91505b6001600160701b038a168211613489575f613395565b6133956001600160701b038b1683614c14565b6001600160701b038a168f106134c0575f199b505050505050505050505050610cdd565b6134d38f6001600160701b038c16614c14565b91508582116134f1576134ea828989898989613cea565b9050613502565b6134ff82888a888a88613d89565b90505b6001600160701b0389168111613518575f61352b565b61352b6001600160701b038a1682614c14565b9b505b5050505050505050505050949350505050565b5f815f0361355157505f19919050565b6064603f8316600a0a600684901c020492915050565b6040516370a0823160e01b81526001600160a01b0386811660048301525f9182918716906370a0823190602401602060405180830381865afa1580156135af573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135d39190614aff565b90508015613647576040516303d1689d60e11b8152600481018290526001600160a01b038716906307a2d13a90602401602060405180830381865afa15801561361e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136429190614aff565b613649565b5f5b9150508015613737575f8184106136605781613662565b835b604051602481018290526001600160a01b038581166044830152898116606483015291925090891690631f8b52159088908a905f9060840160408051601f198184030181529181526020820180516001600160e01b0316632d182be560e21b179052516001600160e01b031960e087901b1681526136e69493929190600401614eb8565b5f604051808303815f875af1158015613701573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526137289190810190614eea565b506137338185614c14565b9350505b8215613857576040516330da145b60e21b81526001600160a01b038781166004830152858116602483015288169063c368516c906044015f604051808303815f87803b158015613785575f5ffd5b505af1158015613797573d5f5f3e3d5ffd5b5050604051602481018690526001600160a01b0385811660448301528a169250631f8b52159150869089905f9060640160408051601f198184030181529181526020820180516001600160e01b0316630967fa2960e31b179052516001600160e01b031960e087901b1681526138139493929190600401614eb8565b5f604051808303815f875af115801561382e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138559190810190614eea565b505b50505050505050565b6101608201516001600160401b039060021615612589575f5f516020614fcd5f395f51905f52610180850151815460405186151560248201526001600160701b038083166044830152600160701b90920490911660648201525f6084820181905292935082916001600160a01b03169060a40160408051601f198184030181529181526020820180516001600160e01b031663b7788faf60e01b179052516139089190614ba2565b5f604051808303815f865af19150503d805f8114612530576040519150601f19603f3d011682016040523d82523d5f602084013e612535565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526111e5908490613efe565b6040516311f3f6b160e21b81526001600160a01b03858116600483015283811660248301525f9182918816906347cfdac490604401602060405180830381865afa1580156139e3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a079190614b16565b15613bd25760405163d283e75f60e01b81526001600160a01b0387811660048301525f919086169063d283e75f90602401602060405180830381865afa158015613a53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a779190614aff565b90505f6001600160a01b03861663acb70815838711613a965786613a98565b835b6040516001600160e01b031960e084901b16815260048101919091526001600160a01b038b1660248201526044016020604051808303815f875af1158015613ae2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b069190614aff565b9050613b128186614c14565b9450613b1e8183614c14565b9150613b2a8184614c01565b9250815f03613bcf576040805160048082526024820183526020820180516001600160e01b031663869e50c760e01b1790529151631f8b521560e01b81526001600160a01b038c1692631f8b521592613b8b928b928e925f92909101614eb8565b5f604051808303815f875af1158015613ba6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613bcd9190810190614eea565b505b50505b8215610aba57604051636e553f6560e01b8152600481018490526001600160a01b038781166024830152861690636e553f65906044016020604051808303815f875af1925050508015613c42575060408051601f3d908101601f19168201909252613c3f91810190614aff565b60015b613cde573d808015613c6f576040519150601f19603f3d011682016040523d82523d5f602084013e613c74565b606091505b5063ca0985cf60e01b613c8682614f7c565b6001600160e01b0319161480613cb45750639811e0c760e01b613ca882614f7c565b6001600160e01b031916145b8190613cd4576040516320d0a2b560e21b815260040161152c9190614fba565b505f935050613ce0565b505b6110108382614c01565b5f5f82670de0b6b3a764000003613d1b575f613d10898703890288808206151591040190565b85019150613d539050565b8785038702670de0b6b3a76400008481038702858b020190888b02025f613d43848484613f6a565b8881019081105f03179450505050505b6001600160701b03811115611010575f19915050610aba565b805f5260045ffd5b815f526001600160a01b03811660045260245ffd5b5f600182901b84028602670de0b6b3a764000084890387028887020102818110918391908383038183031884018a8106151585168b82048101613dcb565b0190565b9450505050505f5f613deb607f613de185613fce565b9080821191030290565b90505f613e04606d613de18b6503782dace9d902613fce565b9050808210613e135781613e15565b805b92505050600181901b5f8415613e86575f613e43670de0b6b3a7640000899003890260021b8b800285614054565b90505f613e51868086614054565b90508181015f86613e6183614087565b901b9050613e7b88820160018d901b808206151591040190565b945050505050613eea565b5f613ea4670de0b6b3a7640000899003890260021b8b8002856140a0565b90505f613eb28680866140a0565b90508181015f86613ec2836140c5565b901b9050613ee3670de0b6b3a76400008c900360011b8e80028a84016140dd565b9450505050505b9788119097039a9950505050505050505050565b5f5f60205f8451602086015f885af180613f1d576040513d5f823e3d81fd5b50505f513d91508115613f34578060011415613f41565b6001600160a01b0384163b155b1561314257604051635274afe760e01b81526001600160a01b038516600482015260240161152c565b5f5f5f5f613f79878787614104565b919450925090505f19828611015f839003613fb257613fa7818786048887061515015b81019081105f031790565b945050505050611157565b610d9b81613f9c845f10613fc888888c8961412c565b90614182565b80157ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be6001600160801b03841160071b84811c6001600160401b031060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c601f161a909118016101000390565b5f5f19838509838502808210818303039150836101000382811b82861c1793508382821b5f100193505050509392505050565b5f61409182614197565b80800292909210909101919050565b5f5f198385099290930280831092819003929092036101008290031b91901c17919050565b5f6140cf82614197565b918290048211909103919050565b5f5f5f5f6140ec878787614104565b925092509250611010815f10613dc78585898661412c565b5f5f5f614111868661421e565b909350915061412186868661423b565b905093509350939050565b5f8281038316908190038190046001018583119094039390930293038290049290921791046003810260029081188083028203028083028203028083028203028083028203028083028203029182029003020290565b818101828110156125bc576125bc6011614248565b70ffffffffffffffffffffffffffffffffff811160071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1781811c620100000160b5600192831c1b0260121c80830401811c80830401811c80830401811c80830401811c80830401811c80830401811c91829004909101901c90565b5f5f5f198385098385029250828110838203039150509250929050565b5f81838509949350505050565b634e487b715f52806020526024601cfd5b604080516101a0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081019190915290565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a081019190915290565b604080516101c0810182525f80825260208201529081016143176142c4565b8152602001614324614259565b81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101409091015290565b6001600160a01b0381168114611551575f5ffd5b5f5f83601f840112614396575f5ffd5b5081356001600160401b038111156143ac575f5ffd5b6020830191508360208285010111156143c3575f5ffd5b9250929050565b5f5f5f5f5f608086880312156143de575f5ffd5b853594506020860135935060408601356143f781614372565b925060608601356001600160401b03811115614411575f5ffd5b61441d88828901614386565b969995985093965092949392505050565b5f5f8284036101e0811215614441575f5ffd5b6101a081121561444f575f5ffd5b839250604061019f1982011215614464575f5ffd5b506101a0830190509250929050565b5f60a08284031215614483575f5ffd5b50919050565b5f60808284031215614483575f5ffd5b5f5f5f5f5f61016086880312156144ae575f5ffd5b85356144b981614372565b94506144c88760208801614473565b93506144d78760c08801614489565b92506101408601356001600160401b03811115614411575f5ffd5b5f60608284031215614483575f5ffd5b5f5f5f5f5f6101408688031215614517575f5ffd5b853561452281614372565b94506145318760208801614473565b93506145408760c088016144f2565b92506101208601356001600160401b03811115614411575f5ffd5b81516001600160701b031681526101a08101602083015161458760208401826001600160701b03169052565b5060408301516145a260408401826001600160701b03169052565b5060608301516145bd60608401826001600160701b03169052565b5060808301516145d860808401826001600160501b03169052565b5060a08301516145f360a08401826001600160501b03169052565b5060c083015161460e60c08401826001600160401b03169052565b5060e083015161462960e08401826001600160401b03169052565b506101008301516146466101008401826001600160401b03169052565b506101208301516146636101208401826001600160401b03169052565b5061014083015161467e61014084018264ffffffffff169052565b5061016083015161469561016084018260ff169052565b506101808301516146b26101808401826001600160a01b03169052565b5092915050565b5f5f5f5f5f5f5f6101a0888a0312156146d0575f5ffd5b87356146db81614372565b96506146ea8960208a01614473565b95506146f98960c08a01614489565b9450610140880135935061016088013592506101808801356001600160401b03811115614724575f5ffd5b6147308a828b01614386565b989b979a50959850939692959293505050565b8060020b8114611551575f5ffd5b5f5f5f5f6101008587031215614765575f5ffd5b843561477081614372565b935061477f8660208701614473565b925060c085013561478f81614372565b915060e085013561479f81614743565b939692955090935050565b8015158114611551575f5ffd5b5f5f5f5f608085870312156147ca575f5ffd5b84356147d581614372565b935060208501356147e581614372565b925060408501359150606085013561479f816147aa565b5f5f6040838503121561480d575f5ffd5b823561481881614372565b91506020830135614828816147aa565b809150509250929050565b5f5f60408385031215614844575f5ffd5b823561484f81614372565b9150602083013561482881614372565b5f5f5f5f5f5f6101608789031215614875575f5ffd5b863561488081614372565b955061488f8860208901614473565b945061489e8860c089016144f2565b935061012087013592506101408701356001600160401b038111156148c1575f5ffd5b6148cd89828a01614386565b979a9699509497509295939492505050565b5f5f5f5f5f5f61012087890312156148f5575f5ffd5b863561490081614372565b955061490f8860208901614473565b945060c0870135935060e087013592506101008701356001600160401b038111156148c1575f5ffd5b8151151581526101c081016020830151614956602084018215159052565b50604083015161496a604084018215159052565b50606083015161497e606084018215159052565b506080830151614992608084018215159052565b5060a08301516149a660a084018215159052565b5060c08301516149ba60c084018215159052565b5060e08301516149ce60e084018215159052565b506101008301516149e461010084018215159052565b506101208301516149fa61012084018215159052565b50610140830151614a1061014084018215159052565b50610160830151614a2661016084018215159052565b50610180830151614a3c61018084018215159052565b506101a08301516146b26101a084018215159052565b5f5f5f60e08486031215614a64575f5ffd5b8335614a6f81614372565b9250614a7e8560208601614473565b915060c0840135614a8e81614372565b809150509250925092565b5f60208284031215614aa9575f5ffd5b813561115781614372565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b5f60208284031215614b0f575f5ffd5b5051919050565b5f60208284031215614b26575f5ffd5b8151611157816147aa565b5f60208284031215614b41575f5ffd5b815161115781614372565b634e487b7160e01b5f52601160045260245ffd5b5f81614b6e57614b6e614b4c565b505f190190565b5f5f60408385031215614b86575f5ffd5b8251614b9181614372565b6020840151909250614828816147aa565b5f82518060208501845e5f920191825250919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff83168152604060208201525f6111546040830184614bb8565b808201808211156125bc576125bc614b4c565b818103818111156125bc576125bc614b4c565b5f5f85851115614c35575f5ffd5b83861115614c41575f5ffd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715614c8a57614c8a614c4e565b604052919050565b5f60c0828403128015614ca3575f5ffd5b5060405160c081016001600160401b0381118282101715614cc657614cc6614c4e565b6040528235614cd481614372565b81526020830135614ce481614372565b60208201526040830135614cf781614372565b60408201526060830135614d0a81614372565b60608201526080830135614d1d81614372565b608082015260a0830135614d3081614372565b60a08201529392505050565b818382375f9101908152919050565b5f600160ff1b8201614d5f57614d5f614b4c565b505f0390565b5f60208284031215614d75575f5ffd5b8135611157816147aa565b5f81600f0b6f7fffffffffffffffffffffffffffffff198103614da557614da5614b4c565b5f0392915050565b5f60208284031215614dbd575f5ffd5b815161115781614743565b80820281158282048414176125bc576125bc614b4c565b5f82614df957634e487b7160e01b5f52601260045260245ffd5b500490565b80516001600160401b03811681146112a5575f5ffd5b5f60208284031215614e24575f5ffd5b6125b982614dfe565b6001600160701b0382811682821603908111156125bc576125bc614b4c565b805161ffff811681146112a5575f5ffd5b5f5f60408385031215614e6e575f5ffd5b614e7783614e4c565b9150614e8560208401614e4c565b90509250929050565b5f5f60408385031215614e9f575f5ffd5b8251614eaa81614372565b9150614e8560208401614dfe565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90610aba90830184614bb8565b5f60208284031215614efa575f5ffd5b81516001600160401b03811115614f0f575f5ffd5b8201601f81018413614f1f575f5ffd5b80516001600160401b03811115614f3857614f38614c4e565b614f4b601f8201601f1916602001614c62565b818152856020838501011115614f5f575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b805160208201516001600160e01b0319811691906004821015614fb3576001600160e01b0319600483900360031b81901b82161692505b5050919050565b602081525f6125b96020830184614bb856fe10ee9b31f73104ff2cf413742414a498e1f7b56c11cb512bca58a9c50727bb58