solc-0.8.36-doubleshift20 0x4e90495f66fb04a5fba401967abd607e2ea0ab46 optimized-high-runs
15465 bytes
608060405234801561000f575f5ffd5b5060043610610283575f3560e01c80635c975abb1161015757806395d89b41116100d2578063c4d66de811610088578063d890c8e21161006e578063d890c8e214610576578063e985e9c514610589578063f980f3dc146105d1575f5ffd5b8063c4d66de814610550578063c87b56dd14610563575f5ffd5b8063a140ae23116100b8578063a140ae2314610517578063a22cb4651461052a578063b88d4fde1461053d575f5ffd5b806395d89b41146104fc5780639cd3cad614610504575f5ffd5b806370a08231116101275780638456cb591161010d5780638456cb59146104d95780638bad0c0a146104e15780638d232094146104e9575f5ffd5b806370a08231146104be5780638129fc1c146104d1575f5ffd5b80635c975abb146104645780636352211e1461047057806367e971ce1461048357806370480275146104ab575f5ffd5b806323b872dd116102015780633f4ba83a116101b757806342966c681161019d57806342966c681461042b5780634f6ccce71461043e57806355f804b314610451575f5ffd5b80633f4ba83a1461041057806342842e0e14610418575f5ffd5b8063278d9c41116101e7578063278d9c41146103d757806328db38b4146103ea5780632f745c59146103fd575f5ffd5b806323b872dd146103b157806324d7806c146103c4575f5ffd5b8063095ea7b311610256578063166c4b051161023c578063166c4b05146103835780631785f53c1461039657806318160ddd146103a9575f5ffd5b8063095ea7b314610342578063127a529814610355575f5ffd5b806301ffc9a71461028757806302c37ddc146102e057806306fdde03146102f5578063081812fc1461030a575b5f5ffd5b6102cb610295366004613307565b7fffffffff00000000000000000000000000000000000000000000000000000000165f9081526033602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6102f36102ee366004613322565b6105e4565b005b6102fd6105f1565b6040516102d79190613385565b61031d610318366004613322565b610682565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d7565b6102f36103503660046133bf565b6106d6565b610375610363366004613322565b5f90815261013d602052604090205490565b6040519081526020016102d7565b6102f36103913660046133e7565b610757565b6102f36103a4366004613408565b6107d0565b609e54610375565b6102f36103bf366004613421565b610848565b6102cb6103d2366004613408565b6108c6565b6102cb6103e536600461356b565b6108d8565b6102cb6103f83660046133e7565b610a2e565b61037561040b3660046133bf565b610a5c565b6102f3610ab7565b6102f3610426366004613421565b610bf2565b6102f3610439366004613322565b610c6b565b61037561044c366004613322565b610cf3565b6102f361045f366004613644565b610d2a565b6101065460ff166102cb565b61031d61047e366004613322565b610e14565b6104966104913660046133bf565b610e41565b604080519283526020830191909152016102d7565b6102f36104b9366004613408565b610e69565b6103756104cc366004613408565b610ee1565b6102f3610f2b565b6102f3611097565b6102f36111d0565b6102f36104f7366004613676565b6111db565b6102fd6113a1565b6102f36105123660046133e7565b6113b1565b6102cb6105253660046133e7565b61142c565b6102f361053836600461372f565b61153d565b6102f361054b366004613768565b6115b5565b6102f361055e366004613408565b611635565b6102fd610571366004613322565b611764565b6102cb6105843660046137d3565b611861565b6102cb610597366004613805565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260696020908152604080832093909416825291909152205460ff1690565b6102cb6105df36600461382d565b611956565b6105ee8133611aa9565b50565b60606101398054610601906138c7565b80601f016020809104026020016040519081016040528092919081815260200182805461062d906138c7565b80156106785780601f1061064f57610100808354040283529160200191610678565b820191905f5260205f20905b81548152906001019060200180831161065b57829003601f168201915b5050505050905090565b5f8181526066602052604081205473ffffffffffffffffffffffffffffffffffffffff166106ae575f5ffd5b505f9081526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6101065460ff1615610749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436f6e747261637420697320506175736564000000000000000000000000000060448201526064015b60405180910390fd5b6107538282611b06565b5050565b610760336108c6565b6107c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f53656e646572206973206e6f742041646d696e000000000000000000000000006044820152606401610740565b6107538282611aa9565b6107d9336108c6565b61083f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f53656e646572206973206e6f742041646d696e000000000000000000000000006044820152606401610740565b6105ee81611c24565b6101065460ff16156108b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436f6e74726163742069732050617573656400000000000000000000000000006044820152606401610740565b6108c1838383611c72565b505050565b5f6108d260d283611c8f565b92915050565b610106545f9060ff1615610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436f6e74726163742069732050617573656400000000000000000000000000006044820152606401610740565b826109538133610a2e565b6109b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f53656e646572206973206e6f74204576656e74204d696e7465720000000000006044820152606401610740565b5f5b8351811015610a0b57610a02858261013c5460016109d99190613945565b6109e39190613945565b8684815181106109f5576109f5613958565b6020026020010151611cdb565b506001016109bb565b50825161013c5f828254610a1f9190613945565b90915550600195945050505050565b5f610a38826108c6565b80610a5557505f83815260d360205260409020610a559083611c8f565b9392505050565b5f610a6683610ee1565b8210610a70575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff83165f908152609c60205260409020805483908110610aa657610aa6613958565b905f5260205f200154905092915050565b610ac0336108c6565b610b26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f53656e646572206973206e6f742041646d696e000000000000000000000000006044820152606401610740565b6101065460ff16610b93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f436f6e7472616374206973206e6f7420506175736564000000000000000000006044820152606401610740565b61010680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6101065460ff1615610c60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436f6e74726163742069732050617573656400000000000000000000000000006044820152606401610740565b6108c1838383611d3b565b610c753382611d55565b80610c845750610c84336108c6565b610cea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e64657220646f65736e27742068617665207065726d697373696f6e00006044820152606401610740565b6105ee81611e0f565b5f610cfd609e5490565b8210610d07575f5ffd5b609e8281548110610d1a57610d1a613958565b905f5260205f2001549050919050565b610d33336108c6565b610d99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f53656e646572206973206e6f742041646d696e000000000000000000000000006044820152606401610740565b6101065460ff1615610e07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436f6e74726163742069732050617573656400000000000000000000000000006044820152606401610740565b61013b61075382826139db565b5f8181526066602052604081205473ffffffffffffffffffffffffffffffffffffffff16806108d2575f5ffd5b5f5f610e4d8484610a5c565b5f81815261013d60205260409020549092505b90509250929050565b610e72336108c6565b610ed8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f53656e646572206973206e6f742041646d696e000000000000000000000000006044820152606401610740565b6105ee81611e21565b5f73ffffffffffffffffffffffffffffffffffffffff8216610f01575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff82165f908152606860205260409020546108d2565b5f54610100900460ff1680610f3f5750303b155b80610f4c57505f5460ff16155b610fd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610740565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00008116610101179091556040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f506f61703a2075736520706172616d65746572697a656420696e697469616c6960448201527f7a65720000000000000000000000000000000000000000000000000000000000606482015261010090910460ff1690608401610740565b6110a0336108c6565b611106576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f53656e646572206973206e6f742041646d696e000000000000000000000000006044820152606401610740565b6101065460ff1615611174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436f6e74726163742069732050617573656400000000000000000000000000006044820152606401610740565b61010680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610be8565b6111d933611c24565b565b5f54610100900460ff16806111ef5750303b155b806111fc57505f5460ff16155b611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610740565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000811661010117909155610100900460ff166112c5611e6f565b6112cd611fb8565b6112d633611635565b6112de61211e565b5f5b82518110156113135761130b8382815181106112fe576112fe613958565b6020026020010151611e21565b6001016112e0565b5061013961132186826139db565b5061013a61132f85826139db565b5061013b61133d84826139db565b506113677f5b5e139f00000000000000000000000000000000000000000000000000000000612231565b5f8054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90921691909117905550505050565b606061013a8054610601906138c7565b816113bc8133610a2e565b611422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f53656e646572206973206e6f74204576656e74204d696e7465720000000000006044820152606401610740565b6108c183836122b9565b610106545f9060ff161561149c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436f6e74726163742069732050617573656400000000000000000000000000006044820152606401610740565b826114a78133610a2e565b61150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f53656e646572206973206e6f74204576656e74204d696e7465720000000000006044820152606401610740565b600161013c5f8282546115209190613945565b925050819055506115358461013c5485611cdb565b949350505050565b6101065460ff16156115ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436f6e74726163742069732050617573656400000000000000000000000000006044820152606401610740565b6107538282612316565b6101065460ff1615611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436f6e74726163742069732050617573656400000000000000000000000000006044820152606401610740565b61162f848484846123cd565b50505050565b5f54610100900460ff16806116495750303b155b8061165657505f5460ff16155b6116e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610740565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000811661010117909155610100900460ff16611720826108c6565b61172d5761172d82611e21565b5f8054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90921691909117905550565b5f81815261013d602052604090205461013b805460609291610a5591611789906138c7565b80601f01602080910402602001604051908101604052809291908181526020018280546117b5906138c7565b80156118005780601f106117d757610100808354040283529160200191611800565b820191905f5260205f20905b8154815290600101906020018083116117e357829003601f168201915b505050505061180e836123ec565b6040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061184d876123ec565b60405180602001604052805f815250612532565b610106545f9060ff16156118d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436f6e74726163742069732050617573656400000000000000000000000000006044820152606401610740565b836118dc8133610a2e565b611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f53656e646572206973206e6f74204576656e74204d696e7465720000000000006044820152606401610740565b61194d858585611cdb565b95945050505050565b610106545f9060ff16156119c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f436f6e74726163742069732050617573656400000000000000000000000000006044820152606401610740565b6119cf336108c6565b611a35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f53656e646572206973206e6f742041646d696e000000000000000000000000006044820152606401610740565b5f5b8351811015611a8757611a7e848281518110611a5557611a55613958565b60200260200101518261013c546001611a6e9190613945565b611a789190613945565b85611cdb565b50600101611a37565b50825161013c5f828254611a9b9190613945565b909155506001949350505050565b5f82815260d360205260409020611ac090826128ca565b60405173ffffffffffffffffffffffffffffffffffffffff82169083907fb6882c4d609d560f6d57e78e73dd96027f0d9852739b0b922537a6dd3c8e944c905f90a35050565b5f611b1082610e14565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b49575f5ffd5b3373ffffffffffffffffffffffffffffffffffffffff82161480611b9c575073ffffffffffffffffffffffffffffffffffffffff81165f90815260696020908152604080832033845290915290205460ff165b611ba4575f5ffd5b5f8281526067602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b611c2f60d2826128ca565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f905f90a250565b611c7c3382611d55565b611c84575f5ffd5b6108c1838383612947565b5f73ffffffffffffffffffffffffffffffffffffffff8216611caf575f5ffd5b5073ffffffffffffffffffffffffffffffffffffffff165f908152602091909152604090205460ff1690565b5f611ce682846129a8565b5f83815261013d602090815260409182902086905581518681529081018590527f4b3711cd7ece062b0828c1b6e08d814a72d4c003383a016c833cbb1b45956e34910160405180910390a15060019392505050565b6108c183838360405180602001604052805f8152506115b5565b5f5f611d6083610e14565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611dcf57508373ffffffffffffffffffffffffffffffffffffffff16611db784610682565b73ffffffffffffffffffffffffffffffffffffffff16145b80611535575073ffffffffffffffffffffffffffffffffffffffff8082165f9081526069602090815260408083209388168352929052205460ff16611535565b6105ee611e1b82610e14565b82612a39565b611e2c60d282612a55565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e339905f90a250565b5f54610100900460ff1680611e835750303b155b80611e9057505f5460ff16155b611f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610740565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000811661010117909155610100900460ff16611f59612ad6565b611f827f80ac58cd00000000000000000000000000000000000000000000000000000000612231565b5f8054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b5f54610100900460ff1680611fcc5750303b155b80611fd957505f5460ff16155b612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610740565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000811661010117909155610100900460ff166120ed7f80ac58cd000000000000000000000000000000000000000000000000000000005f5260336020527fe940c21e8a07a63a671103a94dc940004f6cc2e4962299c5f9e061f0d862c93b5460ff1690565b6120f5575f5ffd5b611f827f780e9d6300000000000000000000000000000000000000000000000000000000612231565b5f54610100900460ff16806121325750303b155b8061213f57505f5460ff16155b6121cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610740565b5f805461010680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000081166101009182900460ff161515909102176001179055565b7fffffffff00000000000000000000000000000000000000000000000000000000808216900361225f575f5ffd5b7fffffffff00000000000000000000000000000000000000000000000000000000165f90815260336020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b5f82815260d3602052604090206122d09082612a55565b60405173ffffffffffffffffffffffffffffffffffffffff82169083907fe1bd660d9f7c60e6fb12dd6479fdde12d21fc96385dc7b9b022c0b2f319e7391905f90a35050565b3373ffffffffffffffffffffffffffffffffffffffff831603612337575f5ffd5b335f81815260696020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6123d8848484610848565b6123e484848484612be1565b61162f575f5ffd5b6060815f0361242e57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b815f5b8115612457578061244181613af6565b91506124509050600a83613b5a565b9150612431565b5f8167ffffffffffffffff8111156124715761247161345b565b6040519080825280601f01601f19166020018201604052801561249b576020820181803683370190505b5090505f6124aa600184613b6d565b90505b8515612529576124be600a87613b80565b6124c9906030613945565b60f81b82826124d781613b93565b9350815181106124e9576124e9613958565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350612522600a87613b5a565b95506124ad565b50949350505050565b805182518451865188516060948a948a948a948a948a945f9490939092909161255b9190613945565b6125659190613945565b61256f9190613945565b6125799190613945565b67ffffffffffffffff8111156125915761259161345b565b6040519080825280601f01601f1916602001820160405280156125bb576020820181803683370190505b509050805f805b8851811015612657578881815181106125dd576125dd613958565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016838361260f81613af6565b94508151811061262157612621613958565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016125c2565b505f5b87518110156126ef5787818151811061267557612675613958565b01602001517fff000000000000000000000000000000000000000000000000000000000000001683836126a781613af6565b9450815181106126b9576126b9613958565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161265a565b505f5b86518110156127875786818151811061270d5761270d613958565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016838361273f81613af6565b94508151811061275157612751613958565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016126f2565b505f5b855181101561281f578581815181106127a5576127a5613958565b01602001517fff000000000000000000000000000000000000000000000000000000000000001683836127d781613af6565b9450815181106127e9576127e9613958565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161278a565b505f5b84518110156128b75784818151811061283d5761283d613958565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016838361286f81613af6565b94508151811061288157612881613958565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612822565b50909d9c50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166128e9575f5ffd5b6128f38282611c8f565b6128fb575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff165f9081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612952838383612cef565b61295c8382612e30565b73ffffffffffffffffffffffffffffffffffffffff919091165f908152609c602081815260408084208054868652609d8452918520829055928252600181018355918352909120015550565b6129b28282612f73565b73ffffffffffffffffffffffffffffffffffffffff919091165f908152609c602090815260408083208054858552609d84528285208190556001808201835591855283852001859055609e8054868652609f909452918420839055820181559091527fcfe2a20ff701a1f3e14f63bd70d6c6bc6fba8172ec6d5a505cdab3927c0a9de60155565b612a43828261306a565b5f90815261013d602052604081205550565b73ffffffffffffffffffffffffffffffffffffffff8116612a74575f5ffd5b612a7e8282611c8f565b15612a87575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff165f9081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b5f54610100900460ff1680612aea5750303b155b80612af757505f5460ff16155b612b83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610740565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000811661010117909155610100900460ff16611f827f01ffc9a700000000000000000000000000000000000000000000000000000000612231565b5f73ffffffffffffffffffffffffffffffffffffffff84163b612c0657506001611535565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff86169063150b7a0290612c609033908a9089908990600401613bc7565b6020604051808303815f875af1158015612c7c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ca09190613c21565b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014915050949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16612d0f82610e14565b73ffffffffffffffffffffffffffffffffffffffff1614612d2e575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff8216612d4d575f5ffd5b612d5681613095565b73ffffffffffffffffffffffffffffffffffffffff83165f908152606860205260409020612d83906130f3565b73ffffffffffffffffffffffffffffffffffffffff82165f908152606860205260409020612db090613104565b5f8181526066602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b73ffffffffffffffffffffffffffffffffffffffff82165f908152609c6020526040812054612e6090600161311f565b5f838152609d6020526040902054909150808214612f275773ffffffffffffffffffffffffffffffffffffffff84165f908152609c60205260408120805484908110612eae57612eae613958565b905f5260205f200154905080609c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208381548110612f0857612f08613958565b5f918252602080832090910192909255918252609d9052604090208190555b73ffffffffffffffffffffffffffffffffffffffff84165f908152609c60205260409020805480612f5a57612f5a613c3c565b600190038181905f5260205f20015f9055905550505050565b73ffffffffffffffffffffffffffffffffffffffff8216612f92575f5ffd5b5f8181526066602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612fbf575f5ffd5b5f81815260666020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871690811790915583526068909152902061302290613104565b604051819073ffffffffffffffffffffffffffffffffffffffff8416905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6130748282613137565b61307e8282612e30565b5f818152609d602052604081205561075381613225565b5f8181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff16156105ee575f90815260676020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b805461310090600161311f565b9055565b6001815f015f8282546131179190613945565b909155505050565b5f8282111561312c575f5ffd5b5f6115358385613b6d565b8173ffffffffffffffffffffffffffffffffffffffff1661315782610e14565b73ffffffffffffffffffffffffffffffffffffffff1614613176575f5ffd5b61317f81613095565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526068602052604090206131ac906130f3565b5f8181526066602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555182919073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b609e545f9061323590600161311f565b5f838152609f6020526040812054609e805493945090928490811061325c5761325c613958565b905f5260205f200154905080609e838154811061327b5761327b613958565b5f918252602080832090910192909255828152609f90915260409020829055609e8054806132ab576132ab613c3c565b600190038181905f5260205f20015f905590555f609f5f8681526020019081526020015f208190555050505050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146105ee575f5ffd5b5f60208284031215613317575f5ffd5b8135610a55816132da565b5f60208284031215613332575f5ffd5b5035919050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610a556020830184613339565b803573ffffffffffffffffffffffffffffffffffffffff811681146133ba575f5ffd5b919050565b5f5f604083850312156133d0575f5ffd5b6133d983613397565b946020939093013593505050565b5f5f604083850312156133f8575f5ffd5b82359150610e6060208401613397565b5f60208284031215613418575f5ffd5b610a5582613397565b5f5f5f60608486031215613433575f5ffd5b61343c84613397565b925061344a60208501613397565b929592945050506040919091013590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156134cf576134cf61345b565b604052919050565b5f67ffffffffffffffff8211156134f0576134f061345b565b5060051b60200190565b5f82601f830112613509575f5ffd5b813561351c613517826134d7565b613488565b8082825260208201915060208360051b86010192508583111561353d575f5ffd5b602085015b838110156135615761355381613397565b835260209283019201613542565b5095945050505050565b5f5f6040838503121561357c575f5ffd5b82359150602083013567ffffffffffffffff811115613599575f5ffd5b6135a5858286016134fa565b9150509250929050565b5f5f67ffffffffffffffff8411156135c9576135c961345b565b50601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0166020016135fc81613488565b915050828152838383011115613610575f5ffd5b828260208301375f602084830101529392505050565b5f82601f830112613635575f5ffd5b610a55838335602085016135af565b5f60208284031215613654575f5ffd5b813567ffffffffffffffff81111561366a575f5ffd5b61153584828501613626565b5f5f5f5f60808587031215613689575f5ffd5b843567ffffffffffffffff81111561369f575f5ffd5b6136ab87828801613626565b945050602085013567ffffffffffffffff8111156136c7575f5ffd5b6136d387828801613626565b935050604085013567ffffffffffffffff8111156136ef575f5ffd5b6136fb87828801613626565b925050606085013567ffffffffffffffff811115613717575f5ffd5b613723878288016134fa565b91505092959194509250565b5f5f60408385031215613740575f5ffd5b61374983613397565b91506020830135801515811461375d575f5ffd5b809150509250929050565b5f5f5f5f6080858703121561377b575f5ffd5b61378485613397565b935061379260208601613397565b925060408501359150606085013567ffffffffffffffff8111156137b4575f5ffd5b8501601f810187136137c4575f5ffd5b613723878235602084016135af565b5f5f5f606084860312156137e5575f5ffd5b83359250602084013591506137fc60408501613397565b90509250925092565b5f5f60408385031215613816575f5ffd5b61381f83613397565b9150610e6060208401613397565b5f5f6040838503121561383e575f5ffd5b823567ffffffffffffffff811115613854575f5ffd5b8301601f81018513613864575f5ffd5b8035613872613517826134d7565b8082825260208201915060208360051b850101925087831115613893575f5ffd5b6020840193505b828410156138b557833582526020938401939091019061389a565b9450610e609250505060208401613397565b600181811c908216806138db57607f821691505b602082108103613912577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156108d2576108d2613918565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b601f8211156108c157828211156108c157805f5260205f20601f840160051c60208510156139b057505f5b90810190601f840160051c035f5b818110156139d3575f838201556001016139be565b505050505050565b815167ffffffffffffffff8111156139f5576139f561345b565b613a0981613a0384546138c7565b84613985565b6020601f821160018114613a5a575f8315613a245750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455613aef565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015613aa75787850151825560209485019460019092019101613a87565b5084821015613ae357868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b505060018360011b0184555b5050505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b2657613b26613918565b5060010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82613b6857613b68613b2d565b500490565b818103818111156108d2576108d2613918565b5f82613b8e57613b8e613b2d565b500690565b5f81613ba157613ba1613918565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b73ffffffffffffffffffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201525f613c176080830184613339565b9695505050505050565b5f60208284031215613c31575f5ffd5b8151610a55816132da565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd