@thru/proto 0.1.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/gen/buf/validate/validate_pb.ts","../src/gen/google/api/field_behavior_pb.ts","../src/gen/thru/common/v1/consensus_pb.ts","../src/gen/thru/common/v1/errors_pb.ts","../src/gen/thru/common/v1/primitives_pb.ts","../src/gen/thru/common/v1/filters_pb.ts","../src/gen/thru/common/v1/pagination_pb.ts","../src/gen/thru/core/v1/types_pb.ts","../src/gen/thru/core/v1/account_pb.ts","../src/gen/thru/core/v1/block_pb.ts","../src/gen/thru/core/v1/state_pb.ts","../src/gen/thru/core/v1/transaction_pb.ts","../src/gen/google/api/http_pb.ts","../src/gen/google/api/annotations_pb.ts","../src/gen/google/api/launch_stage_pb.ts","../src/gen/google/api/client_pb.ts","../src/gen/thru/services/v1/command_service_pb.ts","../src/gen/thru/services/v1/query_service_pb.ts","../src/gen/thru/services/v1/streaming_service_pb.ts"],"names":["fileDesc","file_google_protobuf_descriptor","file_google_protobuf_timestamp","messageDesc","ConsensusStatus","enumDesc","ErrorType","AccountView","BlockView","ExecutionStatus","StateProofType","TransactionView","TransactionVmError","file_google_protobuf_duration","SubmissionStatus","serviceDesc"],"mappings":";;;;AA2BO,IAAM,0BAAA,4BACF,4guEAAA,EAA8guE,CAAC,iCAAiC,6BAAA,EAA+B,+BAAA,EAAiC,8BAA8B,CAAC,CAAA;ACFnpuE,IAAM,iDACXA,QAAAA,CAAS,srBAAA,EAAwrB,CAACC,+BAA+B,CAAC,CAAA;ACZ7tB,IAAM,6BAAA,mBACXD,QAAAA,CAAS,6uCAAA,EAA+uC,CAAC,0BAAA,EAA4B,8BAAA,EAAgCE,8BAA8B,CAAC;AA8D/0C,IAAM,oBAAA,mBACXC,WAAAA,CAAY,6BAAA,EAA+B,CAAC;AAcvC,IAAM,oBAAA,mBACXA,WAAAA,CAAY,6BAAA,EAA+B,CAAC;AAcvC,IAAM,gCAAA,mBACXA,WAAAA,CAAY,6BAAA,EAA+B,CAAC;AAQvC,IAAK,eAAA,qBAAAC,gBAAAA,KAAL;AAML,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAQA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AAQA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AAOA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,eAAY,CAAA,CAAA,GAAZ,WAAA;AAQA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,sBAAmB,CAAA,CAAA,GAAnB,kBAAA;AAQA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,sBAAmB,CAAA,CAAA,GAAnB,kBAAA;AA7CU,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AAmDL,IAAM,qBAAA,mBACXC,QAAAA,CAAS,6BAAA,EAA+B,CAAC;AC1JpC,IAAM,0BAAA,mBACXL,QAAAA,CAAS,6iCAAA,EAA+iC,CAAC,0BAAA,EAA4B,8BAAA,EAAgCE,8BAA8B,CAAC;AAgD/oC,IAAM,iBAAA,mBACXC,WAAAA,CAAY,0BAAA,EAA4B,CAAC;AAOpC,IAAK,SAAA,qBAAAG,UAAAA,KAAL;AAML,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAOA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,eAAY,CAAA,CAAA,GAAZ,WAAA;AAOA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,kBAAe,CAAA,CAAA,GAAf,cAAA;AAOA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,+BAA4B,CAAA,CAAA,GAA5B,2BAAA;AAOA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,qBAAkB,CAAA,CAAA,GAAlB,iBAAA;AAOA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,2BAAwB,CAAA,CAAA,GAAxB,uBAAA;AAOA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,oBAAiB,CAAA,CAAA,GAAjB,gBAAA;AAhDU,EAAA,OAAAA,UAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;AAsDL,IAAM,eAAA,mBACXD,QAAAA,CAAS,0BAAA,EAA4B,CAAC;AClHjC,IAAM,iDACXL,QAAAA,CAAS,wjBAAwjB,CAAC,0BAAA,EAA4B,8BAA8B,CAAC;AAoBxnB,IAAM,YAAA,mBACXG,WAAAA,CAAY,8BAAA,EAAgC,CAAC;AAoBxC,IAAM,eAAA,mBACXA,WAAAA,CAAY,8BAAA,EAAgC,CAAC;AAoBxC,IAAM,cAAA,mBACXA,WAAAA,CAAY,8BAAA,EAAgC,CAAC;AAoBxC,IAAM,iBAAA,mBACXA,WAAAA,CAAY,8BAAA,EAAgC,CAAC;;;ACnFxC,IAAM,2BAAA,mBACXH,QAAAA,CAAS,4pDAAA,EAA8pD,CAAC,0BAAA,EAA4B,8BAAA,EAAgC,8BAA8B,CAAC;AA2B9vD,IAAM,YAAA,mBACXG,WAAAA,CAAY,2BAAA,EAA6B,CAAC;AA0FrC,IAAM,sBAAA,mBACXA,WAAAA,CAAY,2BAAA,EAA6B,CAAC;AAkBrC,IAAM,eAAA,mBACXA,WAAAA,CAAY,2BAAA,EAA6B,CAAC;AAkBrC,IAAM,gBAAA,mBACXA,WAAAA,CAAY,2BAAA,EAA6B,CAAC;AAmCrC,IAAM,yBAAA,mBACXA,WAAAA,CAAY,2BAAA,EAA6B,CAAC;ACpMrC,IAAM,iDACXH,QAAAA,CAAS,kuBAAkuB,CAAC,0BAAA,EAA4B,8BAA8B,CAAC;AAkClyB,IAAM,iBAAA,mBACXG,WAAAA,CAAY,8BAAA,EAAgC,CAAC;AA2BxC,IAAM,kBAAA,mBACXA,WAAAA,CAAY,8BAAA,EAAgC,CAAC;AC/DxC,IAAM,uBAAA,mBACXH,QAAAA,CAAS,iaAAA,EAAma,CAAC,0BAAA,EAA4B,8BAAA,EAAgC,8BAA8B,CAAC;AAoBngB,IAAM,UAAA,mBACXG,WAAAA,CAAY,uBAAA,EAAyB,CAAC;AAoBjC,IAAM,eAAA,mBACXA,WAAAA,CAAY,uBAAA,EAAyB,CAAC;;;ACrCjC,IAAM,yBAAA,mBACXH,QAAAA,CAAS,yuFAAA,EAA2uF,CAAC,0BAAA,EAA4B,8BAAA,EAAgCE,8BAAAA,EAAgC,6BAAA,EAA+B,8BAAA,EAAgC,uBAAuB,CAAC;AAgDn6F,IAAM,kBAAA,mBACXC,WAAAA,CAAY,yBAAA,EAA2B,CAAC;AAyDnC,IAAM,iBAAA,mBACXA,WAAAA,CAAY,yBAAA,EAA2B,CAAC;AA4BnC,IAAM,iBAAA,mBACXA,WAAAA,CAAY,yBAAA,EAA2B,CAAC;AAuBnC,IAAM,eAAA,mBACXA,WAAAA,CAAY,yBAAA,EAA2B,CAAC;AAsCnC,IAAM,iBAAA,mBACXA,WAAAA,CAAY,yBAAA,EAA2B,CAAC;AAuBnC,IAAM,4BAAA,mBACXA,WAAAA,CAAY,yBAAA,EAA2B,CAAC;AAsCnC,IAAM,aAAA,mBACXA,WAAAA,CAAY,yBAAA,EAA2B,CAAC;AAiCnC,IAAM,gBAAA,mBACXA,WAAAA,CAAY,yBAAA,EAA2B,CAAC;AAOnC,IAAK,WAAA,qBAAAI,YAAAA,KAAL;AAML,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAOA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAOA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,eAAY,CAAA,CAAA,GAAZ,WAAA;AAOA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,eAAY,CAAA,CAAA,GAAZ,WAAA;AAOA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AAlCU,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AAwCL,IAAM,iBAAA,mBACXF,QAAAA,CAAS,yBAAA,EAA2B,CAAC;ACxVhC,IAAM,uBAAA,mBACXL,QAAAA,CAAS,wlEAAA,EAA0lE,CAAC,0BAAA,EAA4B,8BAAA,EAAgCE,8BAAAA,EAAgC,8BAAA,EAAgC,6BAAA,EAA+B,uBAAuB,CAAC;AAmFlxE,IAAM,iBAAA,mBACXC,WAAAA,CAAY,uBAAA,EAAyB,CAAC;AAsCjC,IAAM,iBAAA,mBACXA,WAAAA,CAAY,uBAAA,EAAyB,CAAC;AAiCjC,IAAM,WAAA,mBACXA,WAAAA,CAAY,uBAAA,EAAyB,CAAC;AAuBjC,IAAM,cAAA,mBACXA,WAAAA,CAAY,uBAAA,EAAyB,CAAC;AAOjC,IAAK,SAAA,qBAAAK,UAAAA,KAAL;AAIL,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAKA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAKA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,uBAAoB,CAAA,CAAA,GAApB,mBAAA;AAKA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,eAAY,CAAA,CAAA,GAAZ,WAAA;AAKA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AAxBU,EAAA,OAAAA,UAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;AA8BL,IAAM,eAAA,mBACXH,QAAAA,CAAS,uBAAA,EAAyB,CAAC;AAO9B,IAAK,eAAA,qBAAAI,gBAAAA,KAAL;AAIL,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAKA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,aAAU,CAAA,CAAA,GAAV,SAAA;AAKA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AAKA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,YAAS,CAAA,CAAA,GAAT,QAAA;AAnBU,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AAyBL,IAAM,qBAAA,mBACXJ,QAAAA,CAAS,uBAAA,EAAyB,CAAC;ACnQ9B,IAAM,uBAAA,mBACXL,QAAAA,CAAS,yyBAAA,EAA2yB,CAAC,8BAAA,EAAgC,uBAAA,EAAyB,8BAA8B,CAAC;AA4Bx4B,IAAM,uBAAA,mBACXG,WAAAA,CAAY,uBAAA,EAAyB,CAAC;AAuBjC,IAAM,gBAAA,mBACXA,WAAAA,CAAY,uBAAA,EAAyB,CAAC;AAOjC,IAAK,cAAA,qBAAAO,eAAAA,KAAL;AAIL,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAKA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AAKA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AAKA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AAnBU,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;AAyBL,IAAM,oBAAA,mBACXL,QAAAA,CAAS,uBAAA,EAAyB,CAAC;ACtF9B,IAAM,6BAAA,mBACXL,QAAAA,CAAS,wxJAAA,EAA0xJ,CAAC,0BAAA,EAA4B,8BAAA,EAAgC,uBAAA,EAAyB,8BAA8B,CAAC;AAwFn5J,IAAM,uBAAA,mBACXG,WAAAA,CAAY,6BAAA,EAA+B,CAAC;AAyEvC,IAAM,gCAAA,mBACXA,WAAAA,CAAY,6BAAA,EAA+B,CAAC;AAsCvC,IAAM,sBAAA,mBACXA,WAAAA,CAAY,6BAAA,EAA+B,CAAC;AA2CvC,IAAM,iBAAA,mBACXA,WAAAA,CAAY,6BAAA,EAA+B,CAAC;AAuBvC,IAAM,oBAAA,mBACXA,WAAAA,CAAY,6BAAA,EAA+B,CAAC;AAOvC,IAAK,eAAA,qBAAAQ,gBAAAA,KAAL;AAIL,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAKA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,oBAAiB,CAAA,CAAA,GAAjB,gBAAA;AAKA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAKA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,qBAAkB,CAAA,CAAA,GAAlB,iBAAA;AAKA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AAxBU,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AA8BL,IAAM,qBAAA,mBACXN,QAAAA,CAAS,6BAAA,EAA+B,CAAC;AAOpC,IAAK,kBAAA,qBAAAO,mBAAAA,KAAL;AAML,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,oCAAiC,CAAA,CAAA,GAAjC,gCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,yCAAsC,IAAA,CAAA,GAAtC,qCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,0CAAuC,IAAA,CAAA,GAAvC,sCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,wCAAqC,IAAA,CAAA,GAArC,oCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,4CAAyC,IAAA,CAAA,GAAzC,wCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,4CAAyC,IAAA,CAAA,GAAzC,wCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,4CAAyC,IAAA,CAAA,GAAzC,wCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,sDAAmD,IAAA,CAAA,GAAnD,kDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,qDAAkD,IAAA,CAAA,GAAlD,iDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,uDAAoD,IAAA,CAAA,GAApD,mDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,wCAAqC,IAAA,CAAA,GAArC,oCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,yCAAsC,IAAA,CAAA,GAAtC,qCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,yDAAsD,IAAA,CAAA,GAAtD,qDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,2DAAwD,IAAA,CAAA,GAAxD,uDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,uCAAoC,IAAA,CAAA,GAApC,mCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,kCAA+B,IAAA,CAAA,GAA/B,8BAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,wDAAqD,IAAA,CAAA,GAArD,oDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,6DAA0D,IAAA,CAAA,GAA1D,yDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,6DAA0D,IAAA,CAAA,GAA1D,yDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,0DAAuD,IAAA,CAAA,GAAvD,sDAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,sEAAmE,IAAA,CAAA,GAAnE,kEAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,6EAA0E,IAAA,CAAA,GAA1E,yEAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,oCAAiC,IAAA,CAAA,GAAjC,gCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,kDAA+C,IAAA,CAAA,GAA/C,8CAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,oCAAiC,IAAA,CAAA,GAAjC,gCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,uCAAoC,IAAA,CAAA,GAApC,mCAAA;AAOA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,uCAAoC,IAAA,CAAA,GAApC,mCAAA;AA5LU,EAAA,OAAAA,mBAAAA;AAAA,CAAA,EAAA,kBAAA,IAAA,EAAA;AAkML,IAAM,wBAAA,mBACXP,QAAAA,CAAS,6BAAA,EAA+B,CAAC;ACtfpC,IAAM,oBAAA,mBACXL,QAAAA,CAAS,6yBAA6yB,CAAA;ACEjzB,IAAM,8CACXA,QAAAA,CAAS,0ZAA0Z,CAAC,oBAAA,EAAsBC,+BAA+B,CAAC,CAAA;ACLrd,IAAM,4BAAA,mBACXD,QAAAA,CAAS,sdAAsd,CAAA;ACI1d,IAAM,sBAAA,mBACXA,QAAAA,CAAS,k3JAAA,EAAo3J,CAAC,4BAAA,EAA8BC,+BAAAA,EAAiCY,6BAA6B,CAAC,CAAA;ACPt9J,IAAM,qCAAA,mBACXb,QAAAA,CAAS,wiEAAA,EAA0iE,CAAC,2BAAA,EAA6B,sBAAA,EAAwB,8BAAA,EAAgC,6BAAA,EAA+B,8BAAA,EAAgC,6BAAA,EAA+B,uBAAA,EAAyBa,6BAA6B,CAAC;AAoBzxE,IAAM,4BAAA,mBACXV,WAAAA,CAAY,qCAAA,EAAuC,CAAC;AAkB/C,IAAM,6BAAA,mBACXA,WAAAA,CAAY,qCAAA,EAAuC,CAAC;AA2B/C,IAAM,kCAAA,mBACXA,WAAAA,CAAY,qCAAA,EAAuC,CAAC;AA2B/C,IAAM,mCAAA,mBACXA,WAAAA,CAAY,qCAAA,EAAuC,CAAC;AA4B/C,IAAM,4BAAA,mBACXA,WAAAA,CAAY,qCAAA,EAAuC,CAAC;AAyC/C,IAAM,6BAAA,mBACXA,WAAAA,CAAY,qCAAA,EAAuC,CAAC;AAO/C,IAAK,gBAAA,qBAAAW,iBAAAA,KAAL;AAML,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AAOA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AAOA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AApBU,EAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;AA0BL,IAAM,sBAAA,mBACXT,QAAAA,CAAS,qCAAA,EAAuC,CAAC;AAQ5C,IAAM,cAAA,mBAkCX,WAAA,CAAY,qCAAA,EAAuC,CAAC;ACxO/C,IAAM,sDACXL,QAAAA,CAAS,24VAA24V,CAAC,0BAAA,EAA4B,6BAA6B,sBAAA,EAAwB,8BAAA,EAAgCE,gCAAgC,6BAAA,EAA+B,2BAAA,EAA6B,gCAAgC,8BAAA,EAAgC,yBAAA,EAA2B,yBAAyB,uBAAA,EAAyB,6BAAA,EAA+B,uBAAuB,CAAC;AAsCjyW,IAAM,uBAAA,mBACXC,WAAAA,CAAY,mCAAA,EAAqC,CAAC;AAiC7C,IAAM,0BAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,CAAC;AAiC7C,IAAM,2BAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,CAAC;AA4B7C,IAAM,8BAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,CAAC;AAkB7C,IAAM,+BAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,CAAC;AAkB7C,IAAM,gCAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,CAAC;AAwC7C,IAAM,qBAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,CAAC;AAmC7C,IAAM,wBAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,CAAC;AA4J7C,IAAM,yBAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,CAAC;AAuB7C,IAAM,0BAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,CAAC;AAyL7C,IAAM,uBAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AAuB9C,IAAM,wBAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AAiL9C,IAAM,uCAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AAwB9C,IAAM,wCAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AAc9C,IAAM,uBAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AAkB9C,IAAM,wBAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AAuB9C,IAAM,qBAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AAoE9C,IAAM,WAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AAmM9C,IAAM,uBAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AAuB9C,IAAM,wBAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AA2J9C,IAAM,6BAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AAuB9C,IAAM,8BAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AAkB9C,IAAM,iCAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AA4B9C,IAAM,uBAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AAY9C,IAAM,sBAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AA4B9C,IAAM,uBAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AAwB9C,IAAM,0BAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AAuB9C,IAAM,oBAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AAkB9C,IAAM,2BAAA,mBACXA,WAAAA,CAAY,mCAAA,EAAqC,EAAE;AAO9C,IAAM,YAAA,mBA6KXY,WAAAA,CAAY,mCAAA,EAAqC,CAAC;ACtrD7C,IAAM,0DACXf,QAAAA,CAAS,o+HAAA,EAAs+H,CAAC,4BAA4B,8BAAA,EAAgC,8BAAA,EAAgCa,6BAAAA,EAA+BX,8BAAAA,EAAgC,+BAA+B,2BAAA,EAA6B,yBAAA,EAA2B,uBAAA,EAAyB,6BAAA,EAA+B,uBAAuB,CAAC;AAwH7yI,IAAM,yBAAA,mBACXC,WAAAA,CAAY,uCAAA,EAAyC,CAAC;AAkBjD,IAAM,0BAAA,mBACXA,WAAAA,CAAY,uCAAA,EAAyC,CAAC;AAgJjD,IAAM,iCAAA,mBACXA,WAAAA,CAAY,uCAAA,EAAyC,CAAC;AAwCjD,IAAM,mBAAA,mBACXA,WAAAA,CAAY,uCAAA,EAAyC,CAAC;AAkBjD,IAAM,mBAAA,mBACXA,WAAAA,CAAY,uCAAA,EAAyC,CAAC;AAoCjD,IAAM,kCAAA,mBACXA,WAAAA,CAAY,uCAAA,EAAyC,CAAC;AAkHjD,IAAM,+BAAA,mBACXA,WAAAA,CAAY,uCAAA,EAAyC,CAAC;AAkBjD,IAAM,gCAAA,mBACXA,WAAAA,CAAY,uCAAA,EAAyC,CAAC;AA4JjD,IAAM,yBAAA,mBACXA,WAAAA,CAAY,uCAAA,EAAyC,CAAC;AAgDjD,IAAM,0BAAA,mBACXA,WAAAA,CAAY,uCAAA,EAAyC,CAAC;AAuBjD,IAAM,6BAAA,mBACXA,WAAAA,CAAY,uCAAA,EAAyC,EAAE;AA4BlD,IAAM,8BAAA,mBACXA,WAAAA,CAAY,uCAAA,EAAyC,EAAE;AAclD,IAAM,yBAAA,mBACXA,WAAAA,CAAY,uCAAA,EAAyC,EAAE;AA4BlD,IAAM,0BAAA,mBACXA,WAAAA,CAAY,uCAAA,EAAyC,EAAE;AAOlD,IAAM,gBAAA,mBAkDXY,WAAAA,CAAY,uCAAA,EAAyC,CAAC","file":"index.mjs","sourcesContent":["// Copyright 2023-2025 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file buf/validate/validate.proto (package buf.validate, syntax proto2)\n/* eslint-disable */\n\nimport type { GenEnum, GenExtension, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, extDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { Duration, FieldDescriptorProto_Type, FieldMask, FieldOptions, MessageOptions, OneofOptions, Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_field_mask, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file buf/validate/validate.proto.\n */\nexport const file_buf_validate_validate: GenFile = /*@__PURE__*/\n fileDesc(\"ChtidWYvdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8SDGJ1Zi52YWxpZGF0ZSI3CgRSdWxlEgoKAmlkGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCSKGAQoMTWVzc2FnZVJ1bGVzEhYKDmNlbF9leHByZXNzaW9uGAUgAygJEh8KA2NlbBgDIAMoCzISLmJ1Zi52YWxpZGF0ZS5SdWxlEi0KBW9uZW9mGAQgAygLMh4uYnVmLnZhbGlkYXRlLk1lc3NhZ2VPbmVvZlJ1bGVKBAgBEAJSCGRpc2FibGVkIjQKEE1lc3NhZ2VPbmVvZlJ1bGUSDgoGZmllbGRzGAEgAygJEhAKCHJlcXVpcmVkGAIgASgIIh4KCk9uZW9mUnVsZXMSEAoIcmVxdWlyZWQYASABKAgiiwkKCkZpZWxkUnVsZXMSFgoOY2VsX2V4cHJlc3Npb24YHSADKAkSHwoDY2VsGBcgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGUSEAoIcmVxdWlyZWQYGSABKAgSJAoGaWdub3JlGBsgASgOMhQuYnVmLnZhbGlkYXRlLklnbm9yZRIpCgVmbG9hdBgBIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GbG9hdFJ1bGVzSAASKwoGZG91YmxlGAIgASgLMhkuYnVmLnZhbGlkYXRlLkRvdWJsZVJ1bGVzSAASKQoFaW50MzIYAyABKAsyGC5idWYudmFsaWRhdGUuSW50MzJSdWxlc0gAEikKBWludDY0GAQgASgLMhguYnVmLnZhbGlkYXRlLkludDY0UnVsZXNIABIrCgZ1aW50MzIYBSABKAsyGS5idWYudmFsaWRhdGUuVUludDMyUnVsZXNIABIrCgZ1aW50NjQYBiABKAsyGS5idWYudmFsaWRhdGUuVUludDY0UnVsZXNIABIrCgZzaW50MzIYByABKAsyGS5idWYudmFsaWRhdGUuU0ludDMyUnVsZXNIABIrCgZzaW50NjQYCCABKAsyGS5idWYudmFsaWRhdGUuU0ludDY0UnVsZXNIABItCgdmaXhlZDMyGAkgASgLMhouYnVmLnZhbGlkYXRlLkZpeGVkMzJSdWxlc0gAEi0KB2ZpeGVkNjQYCiABKAsyGi5idWYudmFsaWRhdGUuRml4ZWQ2NFJ1bGVzSAASLwoIc2ZpeGVkMzIYCyABKAsyGy5idWYudmFsaWRhdGUuU0ZpeGVkMzJSdWxlc0gAEi8KCHNmaXhlZDY0GAwgASgLMhsuYnVmLnZhbGlkYXRlLlNGaXhlZDY0UnVsZXNIABInCgRib29sGA0gASgLMhcuYnVmLnZhbGlkYXRlLkJvb2xSdWxlc0gAEisKBnN0cmluZxgOIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlc0gAEikKBWJ5dGVzGA8gASgLMhguYnVmLnZhbGlkYXRlLkJ5dGVzUnVsZXNIABInCgRlbnVtGBAgASgLMhcuYnVmLnZhbGlkYXRlLkVudW1SdWxlc0gAEi8KCHJlcGVhdGVkGBIgASgLMhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXNIABIlCgNtYXAYEyABKAsyFi5idWYudmFsaWRhdGUuTWFwUnVsZXNIABIlCgNhbnkYFCABKAsyFi5idWYudmFsaWRhdGUuQW55UnVsZXNIABIvCghkdXJhdGlvbhgVIAEoCzIbLmJ1Zi52YWxpZGF0ZS5EdXJhdGlvblJ1bGVzSAASMgoKZmllbGRfbWFzaxgcIAEoCzIcLmJ1Zi52YWxpZGF0ZS5GaWVsZE1hc2tSdWxlc0gAEjEKCXRpbWVzdGFtcBgWIAEoCzIcLmJ1Zi52YWxpZGF0ZS5UaW1lc3RhbXBSdWxlc0gAQgYKBHR5cGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSJVCg9QcmVkZWZpbmVkUnVsZXMSHwoDY2VsGAEgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSLaFwoKRmxvYXRSdWxlcxKDAQoFY29uc3QYASABKAJCdMJIcQpvCgtmbG9hdC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEp8BCgJsdBgCIAEoAkKQAcJIjAEKiQEKCGZsb2F0Lmx0Gn0haGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0KT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEq8BCgNsdGUYAyABKAJCnwHCSJsBCpgBCglmbG9hdC5sdGUaigEhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlKT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABLvBwoCZ3QYBCABKAJC4AfCSNwHCo0BCghmbG9hdC5ndBqAASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCsMBCgtmbG9hdC5ndF9sdBqzAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCs0BChVmbG9hdC5ndF9sdF9leGNsdXNpdmUaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrTAQoMZmxvYXQuZ3RfbHRlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycK3QEKFmZsb2F0Lmd0X2x0ZV9leGNsdXNpdmUawgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEroICgNndGUYBSABKAJCqgjCSKYICpsBCglmbG9hdC5ndGUajQEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycK0gEKDGZsb2F0Lmd0ZV9sdBrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK3AEKFmZsb2F0Lmd0ZV9sdF9leGNsdXNpdmUawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCuIBCg1mbG9hdC5ndGVfbHRlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrsAQoXZmxvYXQuZ3RlX2x0ZV9leGNsdXNpdmUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESfwoCaW4YBiADKAJCc8JIcApuCghmbG9hdC5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdgoGbm90X2luGAcgAygCQmbCSGMKYQoMZmxvYXQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSdQoGZmluaXRlGAggASgIQmXCSGIKYAoMZmxvYXQuZmluaXRlGlBydWxlcy5maW5pdGUgPyAodGhpcy5pc05hbigpIHx8IHRoaXMuaXNJbmYoKSA/ICd2YWx1ZSBtdXN0IGJlIGZpbml0ZScgOiAnJykgOiAnJxIrCgdleGFtcGxlGAkgAygCQhrCSBcKFQoNZmxvYXQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i7RcKC0RvdWJsZVJ1bGVzEoQBCgVjb25zdBgBIAEoAUJ1wkhyCnAKDGRvdWJsZS5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEqABCgJsdBgCIAEoAUKRAcJIjQEKigEKCWRvdWJsZS5sdBp9IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKwAQoDbHRlGAMgASgBQqABwkicAQqZAQoKZG91YmxlLmx0ZRqKASFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUpPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEvQHCgJndBgEIAEoAULlB8JI4QcKjgEKCWRvdWJsZS5ndBqAASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCsQBCgxkb3VibGUuZ3RfbHQaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrOAQoWZG91YmxlLmd0X2x0X2V4Y2x1c2l2ZRqzAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCtQBCg1kb3VibGUuZ3RfbHRlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycK3gEKF2RvdWJsZS5ndF9sdGVfZXhjbHVzaXZlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARK/CAoDZ3RlGAUgASgBQq8IwkirCAqcAQoKZG91YmxlLmd0ZRqNASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrTAQoNZG91YmxlLmd0ZV9sdBrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK3QEKF2RvdWJsZS5ndGVfbHRfZXhjbHVzaXZlGsEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrjAQoOZG91YmxlLmd0ZV9sdGUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCu0BChhkb3VibGUuZ3RlX2x0ZV9leGNsdXNpdmUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygBQnTCSHEKbwoJZG91YmxlLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKAFCZ8JIZApiCg1kb3VibGUubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSdgoGZmluaXRlGAggASgIQmbCSGMKYQoNZG91YmxlLmZpbml0ZRpQcnVsZXMuZmluaXRlID8gKHRoaXMuaXNOYW4oKSB8fCB0aGlzLmlzSW5mKCkgPyAndmFsdWUgbXVzdCBiZSBmaW5pdGUnIDogJycpIDogJycSLAoHZXhhbXBsZRgJIAMoAUIbwkgYChYKDmRvdWJsZS5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKMFQoKSW50MzJSdWxlcxKDAQoFY29uc3QYASABKAVCdMJIcQpvCgtpbnQzMi5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEooBCgJsdBgCIAEoBUJ8wkh5CncKCGludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpwBCgNsdGUYAyABKAVCjAHCSIgBCoUBCglpbnQzMi5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEpcHCgJndBgEIAEoBUKIB8JIhAcKegoIaW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrMBCgtpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKuwEKFWludDMyLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsMBCgxpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCssBChZpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLjBwoDZ3RlGAUgASgFQtMHwkjPBwqIAQoJaW50MzIuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwgEKDGludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrKAQoWaW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0gEKDWludDMyLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2gEKF2ludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygFQnPCSHAKbgoIaW50MzIuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoBUJmwkhjCmEKDGludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEisKB2V4YW1wbGUYCCADKAVCGsJIFwoVCg1pbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKMFQoKSW50NjRSdWxlcxKDAQoFY29uc3QYASABKANCdMJIcQpvCgtpbnQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEooBCgJsdBgCIAEoA0J8wkh5CncKCGludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpwBCgNsdGUYAyABKANCjAHCSIgBCoUBCglpbnQ2NC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEpcHCgJndBgEIAEoA0KIB8JIhAcKegoIaW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrMBCgtpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKuwEKFWludDY0Lmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsMBCgxpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCssBChZpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLjBwoDZ3RlGAUgASgDQtMHwkjPBwqIAQoJaW50NjQuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwgEKDGludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrKAQoWaW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0gEKDWludDY0Lmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2gEKF2ludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygDQnPCSHAKbgoIaW50NjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoA0JmwkhjCmEKDGludDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEisKB2V4YW1wbGUYCSADKANCGsJIFwoVCg1pbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLVUludDMyUnVsZXMShAEKBWNvbnN0GAEgASgNQnXCSHIKcAoMdWludDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgNQn3CSHoKeAoJdWludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKA1CjQHCSIkBCoYBCgp1aW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKA1CjQfCSIkHCnsKCXVpbnQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHVpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnVpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNdWludDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3VpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgNQtgHwkjUBwqJAQoKdWludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg11aW50MzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChd1aW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnVpbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChh1aW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygNQnTCSHEKbwoJdWludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKA1CZ8JIZApiCg11aW50MzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoDUIbwkgYChYKDnVpbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLVUludDY0UnVsZXMShAEKBWNvbnN0GAEgASgEQnXCSHIKcAoMdWludDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgEQn3CSHoKeAoJdWludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKARCjQHCSIkBCoYBCgp1aW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKARCjQfCSIkHCnsKCXVpbnQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHVpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnVpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNdWludDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3VpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgEQtgHwkjUBwqJAQoKdWludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg11aW50NjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChd1aW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnVpbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChh1aW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygEQnTCSHEKbwoJdWludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKARCZ8JIZApiCg11aW50NjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoBEIbwkgYChYKDnVpbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLU0ludDMyUnVsZXMShAEKBWNvbnN0GAEgASgRQnXCSHIKcAoMc2ludDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgRQn3CSHoKeAoJc2ludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKBFCjQHCSIkBCoYBCgpzaW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKBFCjQfCSIkHCnsKCXNpbnQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHNpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnNpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNc2ludDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3NpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgRQtgHwkjUBwqJAQoKc2ludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg1zaW50MzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChdzaW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnNpbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChhzaW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygRQnTCSHEKbwoJc2ludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKBFCZ8JIZApiCg1zaW50MzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoEUIbwkgYChYKDnNpbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLU0ludDY0UnVsZXMShAEKBWNvbnN0GAEgASgSQnXCSHIKcAoMc2ludDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgSQn3CSHoKeAoJc2ludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKBJCjQHCSIkBCoYBCgpzaW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKBJCjQfCSIkHCnsKCXNpbnQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHNpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnNpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNc2ludDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3NpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgSQtgHwkjUBwqJAQoKc2ludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg1zaW50NjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChdzaW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnNpbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChhzaW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygSQnTCSHEKbwoJc2ludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKBJCZ8JIZApiCg1zaW50NjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoEkIbwkgYChYKDnNpbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKvFQoMRml4ZWQzMlJ1bGVzEoUBCgVjb25zdBgBIAEoB0J2wkhzCnEKDWZpeGVkMzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKMAQoCbHQYAiABKAdCfsJIewp5CgpmaXhlZDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp4BCgNsdGUYAyABKAdCjgHCSIoBCocBCgtmaXhlZDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASoQcKAmd0GAQgASgHQpIHwkiOBwp8CgpmaXhlZDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq1AQoNZml4ZWQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvQEKF2ZpeGVkMzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxQEKDmZpeGVkMzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrNAQoYZml4ZWQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLtBwoDZ3RlGAUgASgHQt0HwkjZBwqKAQoLZml4ZWQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrEAQoOZml4ZWQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzAEKGGZpeGVkMzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1AEKD2ZpeGVkMzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrcAQoZZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKBAQoCaW4YBiADKAdCdcJIcgpwCgpmaXhlZDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ4CgZub3RfaW4YByADKAdCaMJIZQpjCg5maXhlZDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi0KB2V4YW1wbGUYCCADKAdCHMJIGQoXCg9maXhlZDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIq8VCgxGaXhlZDY0UnVsZXMShQEKBWNvbnN0GAEgASgGQnbCSHMKcQoNZml4ZWQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEowBCgJsdBgCIAEoBkJ+wkh7CnkKCmZpeGVkNjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASngEKA2x0ZRgDIAEoBkKOAcJIigEKhwEKC2ZpeGVkNjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKhBwoCZ3QYBCABKAZCkgfCSI4HCnwKCmZpeGVkNjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrUBCg1maXhlZDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq9AQoXZml4ZWQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrFAQoOZml4ZWQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs0BChhmaXhlZDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEu0HCgNndGUYBSABKAZC3QfCSNkHCooBCgtmaXhlZDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsQBCg5maXhlZDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrMAQoYZml4ZWQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrUAQoPZml4ZWQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtwBChlmaXhlZDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoEBCgJpbhgGIAMoBkJ1wkhyCnAKCmZpeGVkNjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEngKBm5vdF9pbhgHIAMoBkJowkhlCmMKDmZpeGVkNjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLQoHZXhhbXBsZRgIIAMoBkIcwkgZChcKD2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iwBUKDVNGaXhlZDMyUnVsZXMShgEKBWNvbnN0GAEgASgPQnfCSHQKcgoOc2ZpeGVkMzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKNAQoCbHQYAiABKA9Cf8JIfAp6CgtzZml4ZWQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKfAQoDbHRlGAMgASgPQo8BwkiLAQqIAQoMc2ZpeGVkMzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKmBwoCZ3QYBCABKA9ClwfCSJMHCn0KC3NmaXhlZDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq2AQoOc2ZpeGVkMzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BChhzZml4ZWQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrGAQoPc2ZpeGVkMzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrOAQoZc2ZpeGVkMzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES8gcKA2d0ZRgFIAEoD0LiB8JI3gcKiwEKDHNmaXhlZDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsUBCg9zZml4ZWQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzQEKGXNmaXhlZDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtUBChBzZml4ZWQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt0BChpzZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKCAQoCaW4YBiADKA9CdsJIcwpxCgtzZml4ZWQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSeQoGbm90X2luGAcgAygPQmnCSGYKZAoPc2ZpeGVkMzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLgoHZXhhbXBsZRgIIAMoD0IdwkgaChgKEHNmaXhlZDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIsAVCg1TRml4ZWQ2NFJ1bGVzEoYBCgVjb25zdBgBIAEoEEJ3wkh0CnIKDnNmaXhlZDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSjQEKAmx0GAIgASgQQn/CSHwKegoLc2ZpeGVkNjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnwEKA2x0ZRgDIAEoEEKPAcJIiwEKiAEKDHNmaXhlZDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASpgcKAmd0GAQgASgQQpcHwkiTBwp9CgtzZml4ZWQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDnNmaXhlZDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYc2ZpeGVkNjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD3NmaXhlZDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGXNmaXhlZDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEvIHCgNndGUYBSABKBBC4gfCSN4HCosBCgxzZml4ZWQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPc2ZpeGVkNjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlzZml4ZWQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQc2ZpeGVkNjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoac2ZpeGVkNjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESggEKAmluGAYgAygQQnbCSHMKcQoLc2ZpeGVkNjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnkKBm5vdF9pbhgHIAMoEEJpwkhmCmQKD3NmaXhlZDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi4KB2V4YW1wbGUYCCADKBBCHcJIGgoYChBzZml4ZWQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLHAQoJQm9vbFJ1bGVzEoIBCgVjb25zdBgBIAEoCEJzwkhwCm4KCmJvb2wuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxIqCgdleGFtcGxlGAIgAygIQhnCSBYKFAoMYm9vbC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIiiDkKC1N0cmluZ1J1bGVzEoYBCgVjb25zdBgBIAEoCUJ3wkh0CnIKDHN0cmluZy5jb25zdBpidGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCBgJXNgJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSfgoDbGVuGBMgASgEQnHCSG4KbAoKc3RyaW5nLmxlbhpedWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubGVuXSkgOiAnJxKZAQoHbWluX2xlbhgCIAEoBEKHAcJIgwEKgAEKDnN0cmluZy5taW5fbGVuGm51aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgJXMgY2hhcmFjdGVycycuZm9ybWF0KFtydWxlcy5taW5fbGVuXSkgOiAnJxKXAQoHbWF4X2xlbhgDIAEoBEKFAcJIgQEKfwoOc3RyaW5nLm1heF9sZW4abXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2xlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBtb3N0ICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubWF4X2xlbl0pIDogJycSmwEKCWxlbl9ieXRlcxgUIAEoBEKHAcJIgwEKgAEKEHN0cmluZy5sZW5fYnl0ZXMabHVpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSAhPSBydWxlcy5sZW5fYnl0ZXMgPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubGVuX2J5dGVzXSkgOiAnJxKjAQoJbWluX2J5dGVzGAQgASgEQo8BwkiLAQqIAQoQc3RyaW5nLm1pbl9ieXRlcxp0dWludChieXRlcyh0aGlzKS5zaXplKCkpIDwgcnVsZXMubWluX2J5dGVzID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1pbl9ieXRlc10pIDogJycSogEKCW1heF9ieXRlcxgFIAEoBEKOAcJIigEKhwEKEHN0cmluZy5tYXhfYnl0ZXMac3VpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA+IHJ1bGVzLm1heF9ieXRlcyA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBtb3N0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1heF9ieXRlc10pIDogJycSjQEKB3BhdHRlcm4YBiABKAlCfMJIeQp3Cg5zdHJpbmcucGF0dGVybhplIXRoaXMubWF0Y2hlcyhydWxlcy5wYXR0ZXJuKSA/ICd2YWx1ZSBkb2VzIG5vdCBtYXRjaCByZWdleCBwYXR0ZXJuIGAlc2AnLmZvcm1hdChbcnVsZXMucGF0dGVybl0pIDogJycShAEKBnByZWZpeBgHIAEoCUJ0wkhxCm8KDXN0cmluZy5wcmVmaXgaXiF0aGlzLnN0YXJ0c1dpdGgocnVsZXMucHJlZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHByZWZpeCBgJXNgJy5mb3JtYXQoW3J1bGVzLnByZWZpeF0pIDogJycSggEKBnN1ZmZpeBgIIAEoCUJywkhvCm0KDXN0cmluZy5zdWZmaXgaXCF0aGlzLmVuZHNXaXRoKHJ1bGVzLnN1ZmZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBzdWZmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEpABCghjb250YWlucxgJIAEoCUJ+wkh7CnkKD3N0cmluZy5jb250YWlucxpmIXRoaXMuY29udGFpbnMocnVsZXMuY29udGFpbnMpID8gJ3ZhbHVlIGRvZXMgbm90IGNvbnRhaW4gc3Vic3RyaW5nIGAlc2AnLmZvcm1hdChbcnVsZXMuY29udGFpbnNdKSA6ICcnEpgBCgxub3RfY29udGFpbnMYFyABKAlCgQHCSH4KfAoTc3RyaW5nLm5vdF9jb250YWlucxpldGhpcy5jb250YWlucyhydWxlcy5ub3RfY29udGFpbnMpID8gJ3ZhbHVlIGNvbnRhaW5zIHN1YnN0cmluZyBgJXNgJy5mb3JtYXQoW3J1bGVzLm5vdF9jb250YWluc10pIDogJycSgAEKAmluGAogAygJQnTCSHEKbwoJc3RyaW5nLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YCyADKAlCZ8JIZApiCg1zdHJpbmcubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycS3wEKBWVtYWlsGAwgASgIQs0BwkjJAQphCgxzdHJpbmcuZW1haWwSI3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBlbWFpbCBhZGRyZXNzGiwhcnVsZXMuZW1haWwgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzRW1haWwoKQpkChJzdHJpbmcuZW1haWxfZW1wdHkSMnZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzGhohcnVsZXMuZW1haWwgfHwgdGhpcyAhPSAnJ0gAEucBCghob3N0bmFtZRgNIAEoCELSAcJIzgEKZQoPc3RyaW5nLmhvc3RuYW1lEh52YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaG9zdG5hbWUaMiFydWxlcy5ob3N0bmFtZSB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpCmUKFXN0cmluZy5ob3N0bmFtZV9lbXB0eRItdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3RuYW1lGh0hcnVsZXMuaG9zdG5hbWUgfHwgdGhpcyAhPSAnJ0gAEscBCgJpcBgOIAEoCEK4AcJItAEKVQoJc3RyaW5nLmlwEiB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxomIXJ1bGVzLmlwIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwKCkKWwoPc3RyaW5nLmlwX2VtcHR5Ei92YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgYWRkcmVzcxoXIXJ1bGVzLmlwIHx8IHRoaXMgIT0gJydIABLWAQoEaXB2NBgPIAEoCELFAcJIwQEKXAoLc3RyaW5nLmlwdjQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaKSFydWxlcy5pcHY0IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwKDQpCmEKEXN0cmluZy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGhkhcnVsZXMuaXB2NCB8fCB0aGlzICE9ICcnSAAS1gEKBGlwdjYYECABKAhCxQHCSMEBClwKC3N0cmluZy5pcHY2EiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NiBhZGRyZXNzGikhcnVsZXMuaXB2NiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCg2KQphChFzdHJpbmcuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxoZIXJ1bGVzLmlwdjYgfHwgdGhpcyAhPSAnJ0gAEr8BCgN1cmkYESABKAhCrwHCSKsBClEKCnN0cmluZy51cmkSGXZhbHVlIG11c3QgYmUgYSB2YWxpZCBVUkkaKCFydWxlcy51cmkgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzVXJpKCkKVgoQc3RyaW5nLnVyaV9lbXB0eRIodmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIFVSSRoYIXJ1bGVzLnVyaSB8fCB0aGlzICE9ICcnSAAScAoHdXJpX3JlZhgSIAEoCEJdwkhaClgKDnN0cmluZy51cmlfcmVmEiN2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVJJIFJlZmVyZW5jZRohIXJ1bGVzLnVyaV9yZWYgfHwgdGhpcy5pc1VyaVJlZigpSAASkAIKB2FkZHJlc3MYFSABKAhC/AHCSPgBCoEBCg5zdHJpbmcuYWRkcmVzcxItdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lLCBvciBpcCBhZGRyZXNzGkAhcnVsZXMuYWRkcmVzcyB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpIHx8IHRoaXMuaXNJcCgpCnIKFHN0cmluZy5hZGRyZXNzX2VtcHR5Ejx2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgaG9zdG5hbWUsIG9yIGlwIGFkZHJlc3MaHCFydWxlcy5hZGRyZXNzIHx8IHRoaXMgIT0gJydIABKYAgoEdXVpZBgWIAEoCEKHAsJIgwIKpQEKC3N0cmluZy51dWlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBp6IXJ1bGVzLnV1aWQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykKWQoRc3RyaW5nLnV1aWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVVUlEGhkhcnVsZXMudXVpZCB8fCB0aGlzICE9ICcnSAAS8AEKBXR1dWlkGCEgASgIQt4BwkjaAQpzCgxzdHJpbmcudHV1aWQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCB0cmltbWVkIFVVSUQaPyFydWxlcy50dXVpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTlhLWZBLUZdezMyfSQnKQpjChJzdHJpbmcudHV1aWRfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCB0cmltbWVkIFVVSUQaGiFydWxlcy50dXVpZCB8fCB0aGlzICE9ICcnSAASlgIKEWlwX3dpdGhfcHJlZml4bGVuGBogASgIQvgBwkj0AQp4ChhzdHJpbmcuaXBfd2l0aF9wcmVmaXhsZW4SH3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBwcmVmaXgaOyFydWxlcy5pcF93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCgpCngKHnN0cmluZy5pcF93aXRoX3ByZWZpeGxlbl9lbXB0eRIudmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIHByZWZpeBomIXJ1bGVzLmlwX3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgIT0gJydIABLPAgoTaXB2NF93aXRoX3ByZWZpeGxlbhgbIAEoCEKvAsJIqwIKkwEKGnN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuEjV2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBo+IXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCkKkgEKIHN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuX2VtcHR5EkR2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBooIXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyAhPSAnJ0gAEs8CChNpcHY2X3dpdGhfcHJlZml4bGVuGBwgASgIQq8CwkirAgqTAQoac3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW4SNXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGj4hcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCg2KQqSAQogc3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW5fZW1wdHkSRHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGighcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzICE9ICcnSAAS8gEKCWlwX3ByZWZpeBgdIAEoCELcAcJI2AEKbAoQc3RyaW5nLmlwX3ByZWZpeBIfdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQIHByZWZpeBo3IXJ1bGVzLmlwX3ByZWZpeCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCh0cnVlKQpoChZzdHJpbmcuaXBfcHJlZml4X2VtcHR5Ei52YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgcHJlZml4Gh4hcnVsZXMuaXBfcHJlZml4IHx8IHRoaXMgIT0gJydIABKDAgoLaXB2NF9wcmVmaXgYHiABKAhC6wHCSOcBCnUKEnN0cmluZy5pcHY0X3ByZWZpeBIhdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgcHJlZml4GjwhcnVsZXMuaXB2NF9wcmVmaXggfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCwgdHJ1ZSkKbgoYc3RyaW5nLmlwdjRfcHJlZml4X2VtcHR5EjB2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBwcmVmaXgaICFydWxlcy5pcHY0X3ByZWZpeCB8fCB0aGlzICE9ICcnSAASgwIKC2lwdjZfcHJlZml4GB8gASgIQusBwkjnAQp1ChJzdHJpbmcuaXB2Nl9wcmVmaXgSIXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IHByZWZpeBo8IXJ1bGVzLmlwdjZfcHJlZml4IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDYsIHRydWUpCm4KGHN0cmluZy5pcHY2X3ByZWZpeF9lbXB0eRIwdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgcHJlZml4GiAhcnVsZXMuaXB2Nl9wcmVmaXggfHwgdGhpcyAhPSAnJ0gAErUCCg1ob3N0X2FuZF9wb3J0GCAgASgIQpsCwkiXAgqZAQoUc3RyaW5nLmhvc3RfYW5kX3BvcnQSQXZhbHVlIG11c3QgYmUgYSB2YWxpZCBob3N0IChob3N0bmFtZSBvciBJUCBhZGRyZXNzKSBhbmQgcG9ydCBwYWlyGj4hcnVsZXMuaG9zdF9hbmRfcG9ydCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0QW5kUG9ydCh0cnVlKQp5ChpzdHJpbmcuaG9zdF9hbmRfcG9ydF9lbXB0eRI3dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3QgYW5kIHBvcnQgcGFpchoiIXJ1bGVzLmhvc3RfYW5kX3BvcnQgfHwgdGhpcyAhPSAnJ0gAEvUBCgR1bGlkGCMgASgIQuQBwkjgAQqCAQoLc3RyaW5nLnVsaWQSGnZhbHVlIG11c3QgYmUgYSB2YWxpZCBVTElEGlchcnVsZXMudWxpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTddWzAtOUEtSEpLTU5QLVRWLVphLWhqa21ucC10di16XXsyNX0kJykKWQoRc3RyaW5nLnVsaWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVTElEGhkhcnVsZXMudWxpZCB8fCB0aGlzICE9ICcnSAASqAUKEHdlbGxfa25vd25fcmVnZXgYGCABKA4yGC5idWYudmFsaWRhdGUuS25vd25SZWdleELxBMJI7QQK8AEKI3N0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl9uYW1lEiZ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSFRUUCBoZWFkZXIgbmFtZRqgAXJ1bGVzLndlbGxfa25vd25fcmVnZXggIT0gMSB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcyghaGFzKHJ1bGVzLnN0cmljdCkgfHwgcnVsZXMuc3RyaWN0ID8nXjo/WzAtOWEtekEtWiEjJCUmXCcqKy0uXl98flx4NjBdKyQnIDonXlteXHUwMDAwXHUwMDBBXHUwMDBEXSskJykKjQEKKXN0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl9uYW1lX2VtcHR5EjV2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSFRUUCBoZWFkZXIgbmFtZRopcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAxIHx8IHRoaXMgIT0gJycK5wEKJHN0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl92YWx1ZRIndmFsdWUgbXVzdCBiZSBhIHZhbGlkIEhUVFAgaGVhZGVyIHZhbHVlGpUBcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAyIHx8IHRoaXMubWF0Y2hlcyghaGFzKHJ1bGVzLnN0cmljdCkgfHwgcnVsZXMuc3RyaWN0ID8nXlteXHUwMDAwLVx1MDAwOFx1MDAwQS1cdTAwMUZcdTAwN0ZdKiQnIDonXlteXHUwMDAwXHUwMDBBXHUwMDBEXSokJylIABIOCgZzdHJpY3QYGSABKAgSLAoHZXhhbXBsZRgiIAMoCUIbwkgYChYKDnN0cmluZy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biLCEgoKQnl0ZXNSdWxlcxKAAQoFY29uc3QYASABKAxCccJIbgpsCgtieXRlcy5jb25zdBpddGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBiZSAleCcuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEngKA2xlbhgNIAEoBEJrwkhoCmYKCWJ5dGVzLmxlbhpZdWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLmxlbl0pIDogJycSkAEKB21pbl9sZW4YAiABKARCf8JIfAp6Cg1ieXRlcy5taW5fbGVuGml1aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWluX2xlbl0pIDogJycSiAEKB21heF9sZW4YAyABKARCd8JIdApyCg1ieXRlcy5tYXhfbGVuGmF1aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9sZW4gPyAndmFsdWUgbXVzdCBiZSBhdCBtb3N0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1heF9sZW5dKSA6ICcnEpABCgdwYXR0ZXJuGAQgASgJQn/CSHwKegoNYnl0ZXMucGF0dGVybhppIXN0cmluZyh0aGlzKS5tYXRjaGVzKHJ1bGVzLnBhdHRlcm4pID8gJ3ZhbHVlIG11c3QgbWF0Y2ggcmVnZXggcGF0dGVybiBgJXNgJy5mb3JtYXQoW3J1bGVzLnBhdHRlcm5dKSA6ICcnEoEBCgZwcmVmaXgYBSABKAxCccJIbgpsCgxieXRlcy5wcmVmaXgaXCF0aGlzLnN0YXJ0c1dpdGgocnVsZXMucHJlZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHByZWZpeCAleCcuZm9ybWF0KFtydWxlcy5wcmVmaXhdKSA6ICcnEn8KBnN1ZmZpeBgGIAEoDEJvwkhsCmoKDGJ5dGVzLnN1ZmZpeBpaIXRoaXMuZW5kc1dpdGgocnVsZXMuc3VmZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHN1ZmZpeCAleCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEoMBCghjb250YWlucxgHIAEoDEJxwkhuCmwKDmJ5dGVzLmNvbnRhaW5zGlohdGhpcy5jb250YWlucyhydWxlcy5jb250YWlucykgPyAndmFsdWUgZG9lcyBub3QgY29udGFpbiAleCcuZm9ybWF0KFtydWxlcy5jb250YWluc10pIDogJycSpwEKAmluGAggAygMQpoBwkiWAQqTAQoIYnl0ZXMuaW4ahgFnZXRGaWVsZChydWxlcywgJ2luJykuc2l6ZSgpID4gMCAmJiAhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ2CgZub3RfaW4YCSADKAxCZsJIYwphCgxieXRlcy5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxLrAQoCaXAYCiABKAhC3AHCSNgBCnQKCGJ5dGVzLmlwEiB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxpGIXJ1bGVzLmlwIHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNCB8fCB0aGlzLnNpemUoKSA9PSAxNgpgCg5ieXRlcy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaHSFydWxlcy5pcCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS5AEKBGlwdjQYCyABKAhC0wHCSM8BCmUKCmJ5dGVzLmlwdjQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaMyFydWxlcy5pcHY0IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNApmChBieXRlcy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGh8hcnVsZXMuaXB2NCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS5QEKBGlwdjYYDCABKAhC1AHCSNABCmYKCmJ5dGVzLmlwdjYSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3MaNCFydWxlcy5pcHY2IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gMTYKZgoQYnl0ZXMuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxofIXJ1bGVzLmlwdjYgfHwgdGhpcy5zaXplKCkgIT0gMEgAEtUBCgR1dWlkGA8gASgIQsQBwkjAAQpeCgpieXRlcy51dWlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBo0IXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSAxNgpeChBieXRlcy51dWlkX2VtcHR5Eil2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgVVVJRBofIXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgIT0gMEgAEisKB2V4YW1wbGUYDiADKAxCGsJIFwoVCg1ieXRlcy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biLUAwoJRW51bVJ1bGVzEoIBCgVjb25zdBgBIAEoBUJzwkhwCm4KCmVudW0uY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxIUCgxkZWZpbmVkX29ubHkYAiABKAgSfgoCaW4YAyADKAVCcsJIbwptCgdlbnVtLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ1CgZub3RfaW4YBCADKAVCZcJIYgpgCgtlbnVtLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEioKB2V4YW1wbGUYBSADKAVCGcJIFgoUCgxlbnVtLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAiL7AwoNUmVwZWF0ZWRSdWxlcxKeAQoJbWluX2l0ZW1zGAEgASgEQooBwkiGAQqDAQoScmVwZWF0ZWQubWluX2l0ZW1zGm11aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9pdGVtcyA/ICd2YWx1ZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJWQgaXRlbShzKScuZm9ybWF0KFtydWxlcy5taW5faXRlbXNdKSA6ICcnEqIBCgltYXhfaXRlbXMYAiABKARCjgHCSIoBCocBChJyZXBlYXRlZC5tYXhfaXRlbXMacXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2l0ZW1zID8gJ3ZhbHVlIG11c3QgY29udGFpbiBubyBtb3JlIHRoYW4gJXMgaXRlbShzKScuZm9ybWF0KFtydWxlcy5tYXhfaXRlbXNdKSA6ICcnEnAKBnVuaXF1ZRgDIAEoCEJgwkhdClsKD3JlcGVhdGVkLnVuaXF1ZRIocmVwZWF0ZWQgdmFsdWUgbXVzdCBjb250YWluIHVuaXF1ZSBpdGVtcxoeIXJ1bGVzLnVuaXF1ZSB8fCB0aGlzLnVuaXF1ZSgpEicKBWl0ZW1zGAQgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMqCQjoBxCAgICAAiKKAwoITWFwUnVsZXMSjwEKCW1pbl9wYWlycxgBIAEoBEJ8wkh5CncKDW1hcC5taW5fcGFpcnMaZnVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX3BhaXJzID8gJ21hcCBtdXN0IGJlIGF0IGxlYXN0ICVkIGVudHJpZXMnLmZvcm1hdChbcnVsZXMubWluX3BhaXJzXSkgOiAnJxKOAQoJbWF4X3BhaXJzGAIgASgEQnvCSHgKdgoNbWFwLm1heF9wYWlycxpldWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfcGFpcnMgPyAnbWFwIG11c3QgYmUgYXQgbW9zdCAlZCBlbnRyaWVzJy5mb3JtYXQoW3J1bGVzLm1heF9wYWlyc10pIDogJycSJgoEa2V5cxgEIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzEigKBnZhbHVlcxgFIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzKgkI6AcQgICAgAIiJgoIQW55UnVsZXMSCgoCaW4YAiADKAkSDgoGbm90X2luGAMgAygJIpkXCg1EdXJhdGlvblJ1bGVzEqEBCgVjb25zdBgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkJ3wkh0CnIKDmR1cmF0aW9uLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSqAEKAmx0GAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQn/CSHwKegoLZHVyYXRpb24ubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASugEKA2x0ZRgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkKPAcJIiwEKiAEKDGR1cmF0aW9uLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASwQcKAmd0GAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQpcHwkiTBwp9CgtkdXJhdGlvbi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDmR1cmF0aW9uLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYZHVyYXRpb24uZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD2R1cmF0aW9uLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGWR1cmF0aW9uLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEo0ICgNndGUYBiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25C4gfCSN4HCosBCgxkdXJhdGlvbi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPZHVyYXRpb24uZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlkdXJhdGlvbi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQZHVyYXRpb24uZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoaZHVyYXRpb24uZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESnQEKAmluGAcgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnbCSHMKcQoLZHVyYXRpb24uaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEpQBCgZub3RfaW4YCCADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CacJIZgpkCg9kdXJhdGlvbi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxJJCgdleGFtcGxlGAkgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQh3CSBoKGAoQZHVyYXRpb24uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i/QUKDkZpZWxkTWFza1J1bGVzEr8BCgVjb25zdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tCkwHCSI8BCowBChBmaWVsZF9tYXNrLmNvbnN0Gnh0aGlzLnBhdGhzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRocyA/ICd2YWx1ZSBtdXN0IGVxdWFsIHBhdGhzICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRoc10pIDogJycS2QEKAmluGAIgAygJQswBwkjIAQrFAQoNZmllbGRfbWFzay5pbhqzASF0aGlzLnBhdGhzLmFsbChwLCBwIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ2luJykuZXhpc3RzKGYsIHAuc3RhcnRzV2l0aChmKycuJykpKSA/ICd2YWx1ZSBtdXN0IG9ubHkgY29udGFpbiBwYXRocyBpbiAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEvMBCgZub3RfaW4YAyADKAlC4gHCSN4BCtsBChFmaWVsZF9tYXNrLm5vdF9pbhrFASF0aGlzLnBhdGhzLmFsbChwLCAhKHAgaW4gZ2V0RmllbGQocnVsZXMsICdub3RfaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ25vdF9pbicpLmV4aXN0cyhmLCBwLnN0YXJ0c1dpdGgoZisnLicpKSkpID8gJ3ZhbHVlIG11c3Qgbm90IGNvbnRhaW4gYW55IHBhdGhzIGluICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnbm90X2luJyldKSA6ICcnEkwKB2V4YW1wbGUYBCADKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQh/CSBwKGgoSZmllbGRfbWFzay5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIikhgKDlRpbWVzdGFtcFJ1bGVzEqMBCgVjb25zdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCeMJIdQpzCg90aW1lc3RhbXAuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKrAQoCbHQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQoABwkh9CnsKDHRpbWVzdGFtcC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABK8AQoDbHRlGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEKQAcJIjAEKiQEKDXRpbWVzdGFtcC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEmwKBmx0X25vdxgHIAEoCEJawkhXClUKEHRpbWVzdGFtcC5sdF9ub3caQShydWxlcy5sdF9ub3cgJiYgdGhpcyA+IG5vdykgPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gbm93JyA6ICcnSAASxwcKAmd0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEKcB8JImAcKfgoMdGltZXN0YW1wLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq3AQoPdGltZXN0YW1wLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq/AQoZdGltZXN0YW1wLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCscBChB0aW1lc3RhbXAuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrPAQoadGltZXN0YW1wLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEpMICgNndGUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQucHwkjjBwqMAQoNdGltZXN0YW1wLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsYBChB0aW1lc3RhbXAuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs4BChp0aW1lc3RhbXAuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1gEKEXRpbWVzdGFtcC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt4BCht0aW1lc3RhbXAuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESbwoGZ3Rfbm93GAggASgIQl3CSFoKWAoQdGltZXN0YW1wLmd0X25vdxpEKHJ1bGVzLmd0X25vdyAmJiB0aGlzIDwgbm93KSA/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBub3cnIDogJydIARK4AQoGd2l0aGluGAkgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQowBwkiIAQqFAQoQdGltZXN0YW1wLndpdGhpbhpxdGhpcyA8IG5vdy1ydWxlcy53aXRoaW4gfHwgdGhpcyA+IG5vdytydWxlcy53aXRoaW4gPyAndmFsdWUgbXVzdCBiZSB3aXRoaW4gJXMgb2Ygbm93Jy5mb3JtYXQoW3J1bGVzLndpdGhpbl0pIDogJycSSwoHZXhhbXBsZRgKIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCHsJIGwoZChF0aW1lc3RhbXAuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iOQoKVmlvbGF0aW9ucxIrCgp2aW9sYXRpb25zGAEgAygLMhcuYnVmLnZhbGlkYXRlLlZpb2xhdGlvbiKfAQoJVmlvbGF0aW9uEiYKBWZpZWxkGAUgASgLMhcuYnVmLnZhbGlkYXRlLkZpZWxkUGF0aBIlCgRydWxlGAYgASgLMhcuYnVmLnZhbGlkYXRlLkZpZWxkUGF0aBIPCgdydWxlX2lkGAIgASgJEg8KB21lc3NhZ2UYAyABKAkSDwoHZm9yX2tleRgEIAEoCEoECAEQAlIKZmllbGRfcGF0aCI9CglGaWVsZFBhdGgSMAoIZWxlbWVudHMYASADKAsyHi5idWYudmFsaWRhdGUuRmllbGRQYXRoRWxlbWVudCLpAgoQRmllbGRQYXRoRWxlbWVudBIUCgxmaWVsZF9udW1iZXIYASABKAUSEgoKZmllbGRfbmFtZRgCIAEoCRI+CgpmaWVsZF90eXBlGAMgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSPAoIa2V5X3R5cGUYBCABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRI+Cgp2YWx1ZV90eXBlGAUgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSDwoFaW5kZXgYBiABKARIABISCghib29sX2tleRgHIAEoCEgAEhEKB2ludF9rZXkYCCABKANIABISCgh1aW50X2tleRgJIAEoBEgAEhQKCnN0cmluZ19rZXkYCiABKAlIAEILCglzdWJzY3JpcHQqoQEKBklnbm9yZRIWChJJR05PUkVfVU5TUEVDSUZJRUQQABIYChRJR05PUkVfSUZfWkVST19WQUxVRRABEhEKDUlHTk9SRV9BTFdBWVMQAyIECAIQAioMSUdOT1JFX0VNUFRZKg5JR05PUkVfREVGQVVMVCoXSUdOT1JFX0lGX0RFRkFVTFRfVkFMVUUqFUlHTk9SRV9JRl9VTlBPUFVMQVRFRCpuCgpLbm93blJlZ2V4EhsKF0tOT1dOX1JFR0VYX1VOU1BFQ0lGSUVEEAASIAocS05PV05fUkVHRVhfSFRUUF9IRUFERVJfTkFNRRABEiEKHUtOT1dOX1JFR0VYX0hUVFBfSEVBREVSX1ZBTFVFEAI6VgoHbWVzc2FnZRIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiHCSABKAsyGi5idWYudmFsaWRhdGUuTWVzc2FnZVJ1bGVzUgdtZXNzYWdlOk4KBW9uZW9mEh0uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucxiHCSABKAsyGC5idWYudmFsaWRhdGUuT25lb2ZSdWxlc1IFb25lb2Y6TgoFZmllbGQSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGIcJIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzUgVmaWVsZDpdCgpwcmVkZWZpbmVkEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxiICSABKAsyHS5idWYudmFsaWRhdGUuUHJlZGVmaW5lZFJ1bGVzUgpwcmVkZWZpbmVkQrsBChBjb20uYnVmLnZhbGlkYXRlQg1WYWxpZGF0ZVByb3RvUAFaR2J1Zi5idWlsZC9nZW4vZ28vYnVmYnVpbGQvcHJvdG92YWxpZGF0ZS9wcm90b2NvbGJ1ZmZlcnMvZ28vYnVmL3ZhbGlkYXRlogIDQlZYqgIMQnVmLlZhbGlkYXRlygIMQnVmXFZhbGlkYXRl4gIYQnVmXFZhbGlkYXRlXEdQQk1ldGFkYXRh6gINQnVmOjpWYWxpZGF0ZQ\", [file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_field_mask, file_google_protobuf_timestamp]);\n\n/**\n * `Rule` represents a validation rule written in the Common Expression\n * Language (CEL) syntax. Each Rule includes a unique identifier, an\n * optional error message, and the CEL expression to evaluate. For more\n * information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message Foo {\n * option (buf.validate.message).cel = {\n * id: \"foo.bar\"\n * message: \"bar must be greater than 0\"\n * expression: \"this.bar > 0\"\n * };\n * int32 bar = 1;\n * }\n * ```\n *\n * @generated from message buf.validate.Rule\n */\nexport type Rule = Message<\"buf.validate.Rule\"> & {\n /**\n * `id` is a string that serves as a machine-readable name for this Rule.\n * It should be unique within its scope, which could be either a message or a field.\n *\n * @generated from field: optional string id = 1;\n */\n id: string;\n\n /**\n * `message` is an optional field that provides a human-readable error message\n * for this Rule when the CEL expression evaluates to false. If a\n * non-empty message is provided, any strings resulting from the CEL\n * expression evaluation are ignored.\n *\n * @generated from field: optional string message = 2;\n */\n message: string;\n\n /**\n * `expression` is the actual CEL expression that will be evaluated for\n * validation. This string must resolve to either a boolean or a string\n * value. If the expression evaluates to false or a non-empty string, the\n * validation is considered failed, and the message is rejected.\n *\n * @generated from field: optional string expression = 3;\n */\n expression: string;\n};\n\n/**\n * Describes the message buf.validate.Rule.\n * Use `create(RuleSchema)` to create a new message.\n */\nexport const RuleSchema: GenMessage<Rule> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 0);\n\n/**\n * MessageRules represents validation rules that are applied to the entire message.\n * It includes disabling options and a list of Rule messages representing Common Expression Language (CEL) validation rules.\n *\n * @generated from message buf.validate.MessageRules\n */\nexport type MessageRules = Message<\"buf.validate.MessageRules\"> & {\n /**\n * `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation\n * rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax.\n *\n * This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for\n * simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will\n * be same as the `expression`.\n *\n * For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message MyMessage {\n * // The field `foo` must be greater than 42.\n * option (buf.validate.message).cel_expression = \"this.foo > 42\";\n * // The field `foo` must be less than 84.\n * option (buf.validate.message).cel_expression = \"this.foo < 84\";\n * optional int32 foo = 1;\n * }\n * ```\n *\n * @generated from field: repeated string cel_expression = 5;\n */\n celExpression: string[];\n\n /**\n * `cel` is a repeated field of type Rule. Each Rule specifies a validation rule to be applied to this message.\n * These rules are written in Common Expression Language (CEL) syntax. For more information,\n * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n *\n * ```proto\n * message MyMessage {\n * // The field `foo` must be greater than 42.\n * option (buf.validate.message).cel = {\n * id: \"my_message.value\",\n * message: \"value must be greater than 42\",\n * expression: \"this.foo > 42\",\n * };\n * optional int32 foo = 1;\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.Rule cel = 3;\n */\n cel: Rule[];\n\n /**\n * `oneof` is a repeated field of type MessageOneofRule that specifies a list of fields\n * of which at most one can be present. If `required` is also specified, then exactly one\n * of the specified fields _must_ be present.\n *\n * This will enforce oneof-like constraints with a few features not provided by\n * actual Protobuf oneof declarations:\n * 1. Repeated and map fields are allowed in this validation. In a Protobuf oneof,\n * only scalar fields are allowed.\n * 2. Fields with implicit presence are allowed. In a Protobuf oneof, all member\n * fields have explicit presence. This means that, for the purpose of determining\n * how many fields are set, explicitly setting such a field to its zero value is\n * effectively the same as not setting it at all.\n * 3. This will always generate validation errors for a message unmarshalled from\n * serialized data that sets more than one field. With a Protobuf oneof, when\n * multiple fields are present in the serialized form, earlier values are usually\n * silently ignored when unmarshalling, with only the last field being set when\n * unmarshalling completes.\n *\n * Note that adding a field to a `oneof` will also set the IGNORE_IF_ZERO_VALUE on the fields. This means\n * only the field that is set will be validated and the unset fields are not validated according to the field rules.\n * This behavior can be overridden by setting `ignore` against a field.\n *\n * ```proto\n * message MyMessage {\n * // Only one of `field1` or `field2` _can_ be present in this message.\n * option (buf.validate.message).oneof = { fields: [\"field1\", \"field2\"] };\n * // Exactly one of `field3` or `field4` _must_ be present in this message.\n * option (buf.validate.message).oneof = { fields: [\"field3\", \"field4\"], required: true };\n * string field1 = 1;\n * bytes field2 = 2;\n * bool field3 = 3;\n * int32 field4 = 4;\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.MessageOneofRule oneof = 4;\n */\n oneof: MessageOneofRule[];\n};\n\n/**\n * Describes the message buf.validate.MessageRules.\n * Use `create(MessageRulesSchema)` to create a new message.\n */\nexport const MessageRulesSchema: GenMessage<MessageRules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 1);\n\n/**\n * @generated from message buf.validate.MessageOneofRule\n */\nexport type MessageOneofRule = Message<\"buf.validate.MessageOneofRule\"> & {\n /**\n * A list of field names to include in the oneof. All field names must be\n * defined in the message. At least one field must be specified, and\n * duplicates are not permitted.\n *\n * @generated from field: repeated string fields = 1;\n */\n fields: string[];\n\n /**\n * If true, one of the fields specified _must_ be set.\n *\n * @generated from field: optional bool required = 2;\n */\n required: boolean;\n};\n\n/**\n * Describes the message buf.validate.MessageOneofRule.\n * Use `create(MessageOneofRuleSchema)` to create a new message.\n */\nexport const MessageOneofRuleSchema: GenMessage<MessageOneofRule> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 2);\n\n/**\n * The `OneofRules` message type enables you to manage rules for\n * oneof fields in your protobuf messages.\n *\n * @generated from message buf.validate.OneofRules\n */\nexport type OneofRules = Message<\"buf.validate.OneofRules\"> & {\n /**\n * If `required` is true, exactly one field of the oneof must be set. A\n * validation error is returned if no fields in the oneof are set. Further rules\n * should be placed on the fields themselves to ensure they are valid values,\n * such as `min_len` or `gt`.\n *\n * ```proto\n * message MyMessage {\n * oneof value {\n * // Either `a` or `b` must be set. If `a` is set, it must also be\n * // non-empty; whereas if `b` is set, it can still be an empty string.\n * option (buf.validate.oneof).required = true;\n * string a = 1 [(buf.validate.field).string.min_len = 1];\n * string b = 2;\n * }\n * }\n * ```\n *\n * @generated from field: optional bool required = 1;\n */\n required: boolean;\n};\n\n/**\n * Describes the message buf.validate.OneofRules.\n * Use `create(OneofRulesSchema)` to create a new message.\n */\nexport const OneofRulesSchema: GenMessage<OneofRules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 3);\n\n/**\n * FieldRules encapsulates the rules for each type of field. Depending on\n * the field, the correct set should be used to ensure proper validations.\n *\n * @generated from message buf.validate.FieldRules\n */\nexport type FieldRules = Message<\"buf.validate.FieldRules\"> & {\n /**\n * `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation\n * rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax.\n *\n * This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for\n * simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will\n * be same as the `expression`.\n *\n * For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message MyMessage {\n * // The field `value` must be greater than 42.\n * optional int32 value = 1 [(buf.validate.field).cel_expression = \"this > 42\"];\n * }\n * ```\n *\n * @generated from field: repeated string cel_expression = 29;\n */\n celExpression: string[];\n\n /**\n * `cel` is a repeated field used to represent a textual expression\n * in the Common Expression Language (CEL) syntax. For more information,\n * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message MyMessage {\n * // The field `value` must be greater than 42.\n * optional int32 value = 1 [(buf.validate.field).cel = {\n * id: \"my_message.value\",\n * message: \"value must be greater than 42\",\n * expression: \"this > 42\",\n * }];\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.Rule cel = 23;\n */\n cel: Rule[];\n\n /**\n * If `required` is true, the field must be set. A validation error is returned\n * if the field is not set.\n *\n * ```proto\n * syntax=\"proto3\";\n *\n * message FieldsWithPresence {\n * // Requires any string to be set, including the empty string.\n * optional string link = 1 [\n * (buf.validate.field).required = true\n * ];\n * // Requires true or false to be set.\n * optional bool disabled = 2 [\n * (buf.validate.field).required = true\n * ];\n * // Requires a message to be set, including the empty message.\n * SomeMessage msg = 4 [\n * (buf.validate.field).required = true\n * ];\n * }\n * ```\n *\n * All fields in the example above track presence. By default, Protovalidate\n * ignores rules on those fields if no value is set. `required` ensures that\n * the fields are set and valid.\n *\n * Fields that don't track presence are always validated by Protovalidate,\n * whether they are set or not. It is not necessary to add `required`. It\n * can be added to indicate that the field cannot be the zero value.\n *\n * ```proto\n * syntax=\"proto3\";\n *\n * message FieldsWithoutPresence {\n * // `string.email` always applies, even to an empty string.\n * string link = 1 [\n * (buf.validate.field).string.email = true\n * ];\n * // `repeated.min_items` always applies, even to an empty list.\n * repeated string labels = 2 [\n * (buf.validate.field).repeated.min_items = 1\n * ];\n * // `required`, for fields that don't track presence, indicates\n * // the value of the field can't be the zero value.\n * int32 zero_value_not_allowed = 3 [\n * (buf.validate.field).required = true\n * ];\n * }\n * ```\n *\n * To learn which fields track presence, see the\n * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).\n *\n * Note: While field rules can be applied to repeated items, map keys, and map\n * values, the elements are always considered to be set. Consequently,\n * specifying `repeated.items.required` is redundant.\n *\n * @generated from field: optional bool required = 25;\n */\n required: boolean;\n\n /**\n * Ignore validation rules on the field if its value matches the specified\n * criteria. See the `Ignore` enum for details.\n *\n * ```proto\n * message UpdateRequest {\n * // The uri rule only applies if the field is not an empty string.\n * string url = 1 [\n * (buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE,\n * (buf.validate.field).string.uri = true\n * ];\n * }\n * ```\n *\n * @generated from field: optional buf.validate.Ignore ignore = 27;\n */\n ignore: Ignore;\n\n /**\n * @generated from oneof buf.validate.FieldRules.type\n */\n type: {\n /**\n * Scalar Field Types\n *\n * @generated from field: buf.validate.FloatRules float = 1;\n */\n value: FloatRules;\n case: \"float\";\n } | {\n /**\n * @generated from field: buf.validate.DoubleRules double = 2;\n */\n value: DoubleRules;\n case: \"double\";\n } | {\n /**\n * @generated from field: buf.validate.Int32Rules int32 = 3;\n */\n value: Int32Rules;\n case: \"int32\";\n } | {\n /**\n * @generated from field: buf.validate.Int64Rules int64 = 4;\n */\n value: Int64Rules;\n case: \"int64\";\n } | {\n /**\n * @generated from field: buf.validate.UInt32Rules uint32 = 5;\n */\n value: UInt32Rules;\n case: \"uint32\";\n } | {\n /**\n * @generated from field: buf.validate.UInt64Rules uint64 = 6;\n */\n value: UInt64Rules;\n case: \"uint64\";\n } | {\n /**\n * @generated from field: buf.validate.SInt32Rules sint32 = 7;\n */\n value: SInt32Rules;\n case: \"sint32\";\n } | {\n /**\n * @generated from field: buf.validate.SInt64Rules sint64 = 8;\n */\n value: SInt64Rules;\n case: \"sint64\";\n } | {\n /**\n * @generated from field: buf.validate.Fixed32Rules fixed32 = 9;\n */\n value: Fixed32Rules;\n case: \"fixed32\";\n } | {\n /**\n * @generated from field: buf.validate.Fixed64Rules fixed64 = 10;\n */\n value: Fixed64Rules;\n case: \"fixed64\";\n } | {\n /**\n * @generated from field: buf.validate.SFixed32Rules sfixed32 = 11;\n */\n value: SFixed32Rules;\n case: \"sfixed32\";\n } | {\n /**\n * @generated from field: buf.validate.SFixed64Rules sfixed64 = 12;\n */\n value: SFixed64Rules;\n case: \"sfixed64\";\n } | {\n /**\n * @generated from field: buf.validate.BoolRules bool = 13;\n */\n value: BoolRules;\n case: \"bool\";\n } | {\n /**\n * @generated from field: buf.validate.StringRules string = 14;\n */\n value: StringRules;\n case: \"string\";\n } | {\n /**\n * @generated from field: buf.validate.BytesRules bytes = 15;\n */\n value: BytesRules;\n case: \"bytes\";\n } | {\n /**\n * Complex Field Types\n *\n * @generated from field: buf.validate.EnumRules enum = 16;\n */\n value: EnumRules;\n case: \"enum\";\n } | {\n /**\n * @generated from field: buf.validate.RepeatedRules repeated = 18;\n */\n value: RepeatedRules;\n case: \"repeated\";\n } | {\n /**\n * @generated from field: buf.validate.MapRules map = 19;\n */\n value: MapRules;\n case: \"map\";\n } | {\n /**\n * Well-Known Field Types\n *\n * @generated from field: buf.validate.AnyRules any = 20;\n */\n value: AnyRules;\n case: \"any\";\n } | {\n /**\n * @generated from field: buf.validate.DurationRules duration = 21;\n */\n value: DurationRules;\n case: \"duration\";\n } | {\n /**\n * @generated from field: buf.validate.FieldMaskRules field_mask = 28;\n */\n value: FieldMaskRules;\n case: \"fieldMask\";\n } | {\n /**\n * @generated from field: buf.validate.TimestampRules timestamp = 22;\n */\n value: TimestampRules;\n case: \"timestamp\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * Describes the message buf.validate.FieldRules.\n * Use `create(FieldRulesSchema)` to create a new message.\n */\nexport const FieldRulesSchema: GenMessage<FieldRules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 4);\n\n/**\n * PredefinedRules are custom rules that can be re-used with\n * multiple fields.\n *\n * @generated from message buf.validate.PredefinedRules\n */\nexport type PredefinedRules = Message<\"buf.validate.PredefinedRules\"> & {\n /**\n * `cel` is a repeated field used to represent a textual expression\n * in the Common Expression Language (CEL) syntax. For more information,\n * [see our documentation](https://buf.build/docs/protovalidate/schemas/predefined-rules/).\n *\n * ```proto\n * message MyMessage {\n * // The field `value` must be greater than 42.\n * optional int32 value = 1 [(buf.validate.predefined).cel = {\n * id: \"my_message.value\",\n * message: \"value must be greater than 42\",\n * expression: \"this > 42\",\n * }];\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.Rule cel = 1;\n */\n cel: Rule[];\n};\n\n/**\n * Describes the message buf.validate.PredefinedRules.\n * Use `create(PredefinedRulesSchema)` to create a new message.\n */\nexport const PredefinedRulesSchema: GenMessage<PredefinedRules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 5);\n\n/**\n * FloatRules describes the rules applied to `float` values. These\n * rules may also be applied to the `google.protobuf.FloatValue` Well-Known-Type.\n *\n * @generated from message buf.validate.FloatRules\n */\nexport type FloatRules = Message<\"buf.validate.FloatRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must equal 42.0\n * float value = 1 [(buf.validate.field).float.const = 42.0];\n * }\n * ```\n *\n * @generated from field: optional float const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.FloatRules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be less than 10.0\n * float value = 1 [(buf.validate.field).float.lt = 10.0];\n * }\n * ```\n *\n * @generated from field: float lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be less than or equal to 10.0\n * float value = 1 [(buf.validate.field).float.lte = 10.0];\n * }\n * ```\n *\n * @generated from field: float lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.FloatRules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be greater than 5.0 [float.gt]\n * float value = 1 [(buf.validate.field).float.gt = 5.0];\n *\n * // value must be greater than 5 and less than 10.0 [float.gt_lt]\n * float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];\n *\n * // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]\n * float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: float gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be greater than or equal to 5.0 [float.gte]\n * float value = 1 [(buf.validate.field).float.gte = 5.0];\n *\n * // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]\n * float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];\n *\n * // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]\n * float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: float gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be in list [1.0, 2.0, 3.0]\n * float value = 1 [(buf.validate.field).float = { in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated float in = 6;\n */\n in: number[];\n\n /**\n * `in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must not be in list [1.0, 2.0, 3.0]\n * float value = 1 [(buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated float not_in = 7;\n */\n notIn: number[];\n\n /**\n * `finite` requires the field value to be finite. If the field value is\n * infinite or NaN, an error message is generated.\n *\n * @generated from field: optional bool finite = 8;\n */\n finite: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFloat {\n * float value = 1 [\n * (buf.validate.field).float.example = 1.0,\n * (buf.validate.field).float.example = inf\n * ];\n * }\n * ```\n *\n * @generated from field: repeated float example = 9;\n */\n example: number[];\n};\n\n/**\n * Describes the message buf.validate.FloatRules.\n * Use `create(FloatRulesSchema)` to create a new message.\n */\nexport const FloatRulesSchema: GenMessage<FloatRules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 6);\n\n/**\n * DoubleRules describes the rules applied to `double` values. These\n * rules may also be applied to the `google.protobuf.DoubleValue` Well-Known-Type.\n *\n * @generated from message buf.validate.DoubleRules\n */\nexport type DoubleRules = Message<\"buf.validate.DoubleRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must equal 42.0\n * double value = 1 [(buf.validate.field).double.const = 42.0];\n * }\n * ```\n *\n * @generated from field: optional double const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.DoubleRules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be less than 10.0\n * double value = 1 [(buf.validate.field).double.lt = 10.0];\n * }\n * ```\n *\n * @generated from field: double lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified value\n * (field <= value). If the field value is greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be less than or equal to 10.0\n * double value = 1 [(buf.validate.field).double.lte = 10.0];\n * }\n * ```\n *\n * @generated from field: double lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.DoubleRules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,\n * the range is reversed, and the field value must be outside the specified\n * range. If the field value doesn't meet the required conditions, an error\n * message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be greater than 5.0 [double.gt]\n * double value = 1 [(buf.validate.field).double.gt = 5.0];\n *\n * // value must be greater than 5 and less than 10.0 [double.gt_lt]\n * double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];\n *\n * // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]\n * double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: double gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be greater than or equal to 5.0 [double.gte]\n * double value = 1 [(buf.validate.field).double.gte = 5.0];\n *\n * // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]\n * double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];\n *\n * // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]\n * double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: double gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be in list [1.0, 2.0, 3.0]\n * double value = 1 [(buf.validate.field).double = { in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated double in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must not be in list [1.0, 2.0, 3.0]\n * double value = 1 [(buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated double not_in = 7;\n */\n notIn: number[];\n\n /**\n * `finite` requires the field value to be finite. If the field value is\n * infinite or NaN, an error message is generated.\n *\n * @generated from field: optional bool finite = 8;\n */\n finite: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyDouble {\n * double value = 1 [\n * (buf.validate.field).double.example = 1.0,\n * (buf.validate.field).double.example = inf\n * ];\n * }\n * ```\n *\n * @generated from field: repeated double example = 9;\n */\n example: number[];\n};\n\n/**\n * Describes the message buf.validate.DoubleRules.\n * Use `create(DoubleRulesSchema)` to create a new message.\n */\nexport const DoubleRulesSchema: GenMessage<DoubleRules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 7);\n\n/**\n * Int32Rules describes the rules applied to `int32` values. These\n * rules may also be applied to the `google.protobuf.Int32Value` Well-Known-Type.\n *\n * @generated from message buf.validate.Int32Rules\n */\nexport type Int32Rules = Message<\"buf.validate.Int32Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must equal 42\n * int32 value = 1 [(buf.validate.field).int32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional int32 const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.Int32Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field\n * < value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be less than 10\n * int32 value = 1 [(buf.validate.field).int32.lt = 10];\n * }\n * ```\n *\n * @generated from field: int32 lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be less than or equal to 10\n * int32 value = 1 [(buf.validate.field).int32.lte = 10];\n * }\n * ```\n *\n * @generated from field: int32 lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.Int32Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be greater than 5 [int32.gt]\n * int32 value = 1 [(buf.validate.field).int32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [int32.gt_lt]\n * int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]\n * int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int32 gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified value\n * (exclusive). If the value of `gte` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be greater than or equal to 5 [int32.gte]\n * int32 value = 1 [(buf.validate.field).int32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]\n * int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]\n * int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int32 gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be in list [1, 2, 3]\n * int32 value = 1 [(buf.validate.field).int32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int32 in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must not be in list [1, 2, 3]\n * int32 value = 1 [(buf.validate.field).int32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int32 not_in = 7;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyInt32 {\n * int32 value = 1 [\n * (buf.validate.field).int32.example = 1,\n * (buf.validate.field).int32.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated int32 example = 8;\n */\n example: number[];\n};\n\n/**\n * Describes the message buf.validate.Int32Rules.\n * Use `create(Int32RulesSchema)` to create a new message.\n */\nexport const Int32RulesSchema: GenMessage<Int32Rules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 8);\n\n/**\n * Int64Rules describes the rules applied to `int64` values. These\n * rules may also be applied to the `google.protobuf.Int64Value` Well-Known-Type.\n *\n * @generated from message buf.validate.Int64Rules\n */\nexport type Int64Rules = Message<\"buf.validate.Int64Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must equal 42\n * int64 value = 1 [(buf.validate.field).int64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional int64 const = 1;\n */\n const: bigint;\n\n /**\n * @generated from oneof buf.validate.Int64Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be less than 10\n * int64 value = 1 [(buf.validate.field).int64.lt = 10];\n * }\n * ```\n *\n * @generated from field: int64 lt = 2;\n */\n value: bigint;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be less than or equal to 10\n * int64 value = 1 [(buf.validate.field).int64.lte = 10];\n * }\n * ```\n *\n * @generated from field: int64 lte = 3;\n */\n value: bigint;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.Int64Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be greater than 5 [int64.gt]\n * int64 value = 1 [(buf.validate.field).int64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [int64.gt_lt]\n * int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]\n * int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int64 gt = 4;\n */\n value: bigint;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be greater than or equal to 5 [int64.gte]\n * int64 value = 1 [(buf.validate.field).int64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]\n * int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]\n * int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int64 gte = 5;\n */\n value: bigint;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be in list [1, 2, 3]\n * int64 value = 1 [(buf.validate.field).int64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int64 in = 6;\n */\n in: bigint[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must not be in list [1, 2, 3]\n * int64 value = 1 [(buf.validate.field).int64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int64 not_in = 7;\n */\n notIn: bigint[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyInt64 {\n * int64 value = 1 [\n * (buf.validate.field).int64.example = 1,\n * (buf.validate.field).int64.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated int64 example = 9;\n */\n example: bigint[];\n};\n\n/**\n * Describes the message buf.validate.Int64Rules.\n * Use `create(Int64RulesSchema)` to create a new message.\n */\nexport const Int64RulesSchema: GenMessage<Int64Rules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 9);\n\n/**\n * UInt32Rules describes the rules applied to `uint32` values. These\n * rules may also be applied to the `google.protobuf.UInt32Value` Well-Known-Type.\n *\n * @generated from message buf.validate.UInt32Rules\n */\nexport type UInt32Rules = Message<\"buf.validate.UInt32Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must equal 42\n * uint32 value = 1 [(buf.validate.field).uint32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional uint32 const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.UInt32Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be less than 10\n * uint32 value = 1 [(buf.validate.field).uint32.lt = 10];\n * }\n * ```\n *\n * @generated from field: uint32 lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be less than or equal to 10\n * uint32 value = 1 [(buf.validate.field).uint32.lte = 10];\n * }\n * ```\n *\n * @generated from field: uint32 lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.UInt32Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be greater than 5 [uint32.gt]\n * uint32 value = 1 [(buf.validate.field).uint32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [uint32.gt_lt]\n * uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]\n * uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint32 gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be greater than or equal to 5 [uint32.gte]\n * uint32 value = 1 [(buf.validate.field).uint32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]\n * uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]\n * uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint32 gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be in list [1, 2, 3]\n * uint32 value = 1 [(buf.validate.field).uint32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint32 in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must not be in list [1, 2, 3]\n * uint32 value = 1 [(buf.validate.field).uint32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint32 not_in = 7;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyUInt32 {\n * uint32 value = 1 [\n * (buf.validate.field).uint32.example = 1,\n * (buf.validate.field).uint32.example = 10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated uint32 example = 8;\n */\n example: number[];\n};\n\n/**\n * Describes the message buf.validate.UInt32Rules.\n * Use `create(UInt32RulesSchema)` to create a new message.\n */\nexport const UInt32RulesSchema: GenMessage<UInt32Rules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 10);\n\n/**\n * UInt64Rules describes the rules applied to `uint64` values. These\n * rules may also be applied to the `google.protobuf.UInt64Value` Well-Known-Type.\n *\n * @generated from message buf.validate.UInt64Rules\n */\nexport type UInt64Rules = Message<\"buf.validate.UInt64Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must equal 42\n * uint64 value = 1 [(buf.validate.field).uint64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional uint64 const = 1;\n */\n const: bigint;\n\n /**\n * @generated from oneof buf.validate.UInt64Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be less than 10\n * uint64 value = 1 [(buf.validate.field).uint64.lt = 10];\n * }\n * ```\n *\n * @generated from field: uint64 lt = 2;\n */\n value: bigint;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be less than or equal to 10\n * uint64 value = 1 [(buf.validate.field).uint64.lte = 10];\n * }\n * ```\n *\n * @generated from field: uint64 lte = 3;\n */\n value: bigint;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.UInt64Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be greater than 5 [uint64.gt]\n * uint64 value = 1 [(buf.validate.field).uint64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [uint64.gt_lt]\n * uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]\n * uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint64 gt = 4;\n */\n value: bigint;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be greater than or equal to 5 [uint64.gte]\n * uint64 value = 1 [(buf.validate.field).uint64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]\n * uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]\n * uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint64 gte = 5;\n */\n value: bigint;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be in list [1, 2, 3]\n * uint64 value = 1 [(buf.validate.field).uint64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint64 in = 6;\n */\n in: bigint[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must not be in list [1, 2, 3]\n * uint64 value = 1 [(buf.validate.field).uint64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint64 not_in = 7;\n */\n notIn: bigint[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyUInt64 {\n * uint64 value = 1 [\n * (buf.validate.field).uint64.example = 1,\n * (buf.validate.field).uint64.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated uint64 example = 8;\n */\n example: bigint[];\n};\n\n/**\n * Describes the message buf.validate.UInt64Rules.\n * Use `create(UInt64RulesSchema)` to create a new message.\n */\nexport const UInt64RulesSchema: GenMessage<UInt64Rules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 11);\n\n/**\n * SInt32Rules describes the rules applied to `sint32` values.\n *\n * @generated from message buf.validate.SInt32Rules\n */\nexport type SInt32Rules = Message<\"buf.validate.SInt32Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must equal 42\n * sint32 value = 1 [(buf.validate.field).sint32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sint32 const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.SInt32Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field\n * < value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be less than 10\n * sint32 value = 1 [(buf.validate.field).sint32.lt = 10];\n * }\n * ```\n *\n * @generated from field: sint32 lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be less than or equal to 10\n * sint32 value = 1 [(buf.validate.field).sint32.lte = 10];\n * }\n * ```\n *\n * @generated from field: sint32 lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.SInt32Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be greater than 5 [sint32.gt]\n * sint32 value = 1 [(buf.validate.field).sint32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sint32.gt_lt]\n * sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]\n * sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint32 gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be greater than or equal to 5 [sint32.gte]\n * sint32 value = 1 [(buf.validate.field).sint32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]\n * sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]\n * sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint32 gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be in list [1, 2, 3]\n * sint32 value = 1 [(buf.validate.field).sint32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint32 in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must not be in list [1, 2, 3]\n * sint32 value = 1 [(buf.validate.field).sint32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint32 not_in = 7;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySInt32 {\n * sint32 value = 1 [\n * (buf.validate.field).sint32.example = 1,\n * (buf.validate.field).sint32.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sint32 example = 8;\n */\n example: number[];\n};\n\n/**\n * Describes the message buf.validate.SInt32Rules.\n * Use `create(SInt32RulesSchema)` to create a new message.\n */\nexport const SInt32RulesSchema: GenMessage<SInt32Rules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 12);\n\n/**\n * SInt64Rules describes the rules applied to `sint64` values.\n *\n * @generated from message buf.validate.SInt64Rules\n */\nexport type SInt64Rules = Message<\"buf.validate.SInt64Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must equal 42\n * sint64 value = 1 [(buf.validate.field).sint64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sint64 const = 1;\n */\n const: bigint;\n\n /**\n * @generated from oneof buf.validate.SInt64Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field\n * < value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be less than 10\n * sint64 value = 1 [(buf.validate.field).sint64.lt = 10];\n * }\n * ```\n *\n * @generated from field: sint64 lt = 2;\n */\n value: bigint;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be less than or equal to 10\n * sint64 value = 1 [(buf.validate.field).sint64.lte = 10];\n * }\n * ```\n *\n * @generated from field: sint64 lte = 3;\n */\n value: bigint;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.SInt64Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be greater than 5 [sint64.gt]\n * sint64 value = 1 [(buf.validate.field).sint64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sint64.gt_lt]\n * sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]\n * sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint64 gt = 4;\n */\n value: bigint;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be greater than or equal to 5 [sint64.gte]\n * sint64 value = 1 [(buf.validate.field).sint64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]\n * sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]\n * sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint64 gte = 5;\n */\n value: bigint;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be in list [1, 2, 3]\n * sint64 value = 1 [(buf.validate.field).sint64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint64 in = 6;\n */\n in: bigint[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must not be in list [1, 2, 3]\n * sint64 value = 1 [(buf.validate.field).sint64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint64 not_in = 7;\n */\n notIn: bigint[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySInt64 {\n * sint64 value = 1 [\n * (buf.validate.field).sint64.example = 1,\n * (buf.validate.field).sint64.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sint64 example = 8;\n */\n example: bigint[];\n};\n\n/**\n * Describes the message buf.validate.SInt64Rules.\n * Use `create(SInt64RulesSchema)` to create a new message.\n */\nexport const SInt64RulesSchema: GenMessage<SInt64Rules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 13);\n\n/**\n * Fixed32Rules describes the rules applied to `fixed32` values.\n *\n * @generated from message buf.validate.Fixed32Rules\n */\nexport type Fixed32Rules = Message<\"buf.validate.Fixed32Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must equal 42\n * fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional fixed32 const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.Fixed32Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be less than 10\n * fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];\n * }\n * ```\n *\n * @generated from field: fixed32 lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be less than or equal to 10\n * fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];\n * }\n * ```\n *\n * @generated from field: fixed32 lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.Fixed32Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be greater than 5 [fixed32.gt]\n * fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [fixed32.gt_lt]\n * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]\n * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed32 gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be greater than or equal to 5 [fixed32.gte]\n * fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]\n * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]\n * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed32 gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be in list [1, 2, 3]\n * fixed32 value = 1 [(buf.validate.field).fixed32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed32 in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must not be in list [1, 2, 3]\n * fixed32 value = 1 [(buf.validate.field).fixed32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed32 not_in = 7;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFixed32 {\n * fixed32 value = 1 [\n * (buf.validate.field).fixed32.example = 1,\n * (buf.validate.field).fixed32.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated fixed32 example = 8;\n */\n example: number[];\n};\n\n/**\n * Describes the message buf.validate.Fixed32Rules.\n * Use `create(Fixed32RulesSchema)` to create a new message.\n */\nexport const Fixed32RulesSchema: GenMessage<Fixed32Rules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 14);\n\n/**\n * Fixed64Rules describes the rules applied to `fixed64` values.\n *\n * @generated from message buf.validate.Fixed64Rules\n */\nexport type Fixed64Rules = Message<\"buf.validate.Fixed64Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must equal 42\n * fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional fixed64 const = 1;\n */\n const: bigint;\n\n /**\n * @generated from oneof buf.validate.Fixed64Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be less than 10\n * fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];\n * }\n * ```\n *\n * @generated from field: fixed64 lt = 2;\n */\n value: bigint;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be less than or equal to 10\n * fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];\n * }\n * ```\n *\n * @generated from field: fixed64 lte = 3;\n */\n value: bigint;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.Fixed64Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be greater than 5 [fixed64.gt]\n * fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [fixed64.gt_lt]\n * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]\n * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed64 gt = 4;\n */\n value: bigint;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be greater than or equal to 5 [fixed64.gte]\n * fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]\n * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]\n * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed64 gte = 5;\n */\n value: bigint;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be in list [1, 2, 3]\n * fixed64 value = 1 [(buf.validate.field).fixed64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed64 in = 6;\n */\n in: bigint[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must not be in list [1, 2, 3]\n * fixed64 value = 1 [(buf.validate.field).fixed64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed64 not_in = 7;\n */\n notIn: bigint[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFixed64 {\n * fixed64 value = 1 [\n * (buf.validate.field).fixed64.example = 1,\n * (buf.validate.field).fixed64.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated fixed64 example = 8;\n */\n example: bigint[];\n};\n\n/**\n * Describes the message buf.validate.Fixed64Rules.\n * Use `create(Fixed64RulesSchema)` to create a new message.\n */\nexport const Fixed64RulesSchema: GenMessage<Fixed64Rules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 15);\n\n/**\n * SFixed32Rules describes the rules applied to `fixed32` values.\n *\n * @generated from message buf.validate.SFixed32Rules\n */\nexport type SFixed32Rules = Message<\"buf.validate.SFixed32Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must equal 42\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sfixed32 const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.SFixed32Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be less than 10\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];\n * }\n * ```\n *\n * @generated from field: sfixed32 lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be less than or equal to 10\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];\n * }\n * ```\n *\n * @generated from field: sfixed32 lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.SFixed32Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be greater than 5 [sfixed32.gt]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sfixed32.gt_lt]\n * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]\n * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed32 gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be greater than or equal to 5 [sfixed32.gte]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]\n * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]\n * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed32 gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be in list [1, 2, 3]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed32 in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must not be in list [1, 2, 3]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed32 not_in = 7;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySFixed32 {\n * sfixed32 value = 1 [\n * (buf.validate.field).sfixed32.example = 1,\n * (buf.validate.field).sfixed32.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sfixed32 example = 8;\n */\n example: number[];\n};\n\n/**\n * Describes the message buf.validate.SFixed32Rules.\n * Use `create(SFixed32RulesSchema)` to create a new message.\n */\nexport const SFixed32RulesSchema: GenMessage<SFixed32Rules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 16);\n\n/**\n * SFixed64Rules describes the rules applied to `fixed64` values.\n *\n * @generated from message buf.validate.SFixed64Rules\n */\nexport type SFixed64Rules = Message<\"buf.validate.SFixed64Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must equal 42\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sfixed64 const = 1;\n */\n const: bigint;\n\n /**\n * @generated from oneof buf.validate.SFixed64Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be less than 10\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];\n * }\n * ```\n *\n * @generated from field: sfixed64 lt = 2;\n */\n value: bigint;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be less than or equal to 10\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];\n * }\n * ```\n *\n * @generated from field: sfixed64 lte = 3;\n */\n value: bigint;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.SFixed64Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be greater than 5 [sfixed64.gt]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sfixed64.gt_lt]\n * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]\n * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed64 gt = 4;\n */\n value: bigint;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be greater than or equal to 5 [sfixed64.gte]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]\n * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]\n * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed64 gte = 5;\n */\n value: bigint;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be in list [1, 2, 3]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed64 in = 6;\n */\n in: bigint[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must not be in list [1, 2, 3]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed64 not_in = 7;\n */\n notIn: bigint[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySFixed64 {\n * sfixed64 value = 1 [\n * (buf.validate.field).sfixed64.example = 1,\n * (buf.validate.field).sfixed64.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sfixed64 example = 8;\n */\n example: bigint[];\n};\n\n/**\n * Describes the message buf.validate.SFixed64Rules.\n * Use `create(SFixed64RulesSchema)` to create a new message.\n */\nexport const SFixed64RulesSchema: GenMessage<SFixed64Rules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 17);\n\n/**\n * BoolRules describes the rules applied to `bool` values. These rules\n * may also be applied to the `google.protobuf.BoolValue` Well-Known-Type.\n *\n * @generated from message buf.validate.BoolRules\n */\nexport type BoolRules = Message<\"buf.validate.BoolRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified boolean value.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyBool {\n * // value must equal true\n * bool value = 1 [(buf.validate.field).bool.const = true];\n * }\n * ```\n *\n * @generated from field: optional bool const = 1;\n */\n const: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyBool {\n * bool value = 1 [\n * (buf.validate.field).bool.example = 1,\n * (buf.validate.field).bool.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated bool example = 2;\n */\n example: boolean[];\n};\n\n/**\n * Describes the message buf.validate.BoolRules.\n * Use `create(BoolRulesSchema)` to create a new message.\n */\nexport const BoolRulesSchema: GenMessage<BoolRules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 18);\n\n/**\n * StringRules describes the rules applied to `string` values These\n * rules may also be applied to the `google.protobuf.StringValue` Well-Known-Type.\n *\n * @generated from message buf.validate.StringRules\n */\nexport type StringRules = Message<\"buf.validate.StringRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyString {\n * // value must equal `hello`\n * string value = 1 [(buf.validate.field).string.const = \"hello\"];\n * }\n * ```\n *\n * @generated from field: optional string const = 1;\n */\n const: string;\n\n /**\n * `len` dictates that the field value must have the specified\n * number of characters (Unicode code points), which may differ from the number\n * of bytes in the string. If the field value does not meet the specified\n * length, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be 5 characters\n * string value = 1 [(buf.validate.field).string.len = 5];\n * }\n * ```\n *\n * @generated from field: optional uint64 len = 19;\n */\n len: bigint;\n\n /**\n * `min_len` specifies that the field value must have at least the specified\n * number of characters (Unicode code points), which may differ from the number\n * of bytes in the string. If the field value contains fewer characters, an error\n * message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at least 3 characters\n * string value = 1 [(buf.validate.field).string.min_len = 3];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_len = 2;\n */\n minLen: bigint;\n\n /**\n * `max_len` specifies that the field value must have no more than the specified\n * number of characters (Unicode code points), which may differ from the\n * number of bytes in the string. If the field value contains more characters,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at most 10 characters\n * string value = 1 [(buf.validate.field).string.max_len = 10];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_len = 3;\n */\n maxLen: bigint;\n\n /**\n * `len_bytes` dictates that the field value must have the specified number of\n * bytes. If the field value does not match the specified length in bytes,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be 6 bytes\n * string value = 1 [(buf.validate.field).string.len_bytes = 6];\n * }\n * ```\n *\n * @generated from field: optional uint64 len_bytes = 20;\n */\n lenBytes: bigint;\n\n /**\n * `min_bytes` specifies that the field value must have at least the specified\n * number of bytes. If the field value contains fewer bytes, an error message\n * will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at least 4 bytes\n * string value = 1 [(buf.validate.field).string.min_bytes = 4];\n * }\n *\n * ```\n *\n * @generated from field: optional uint64 min_bytes = 4;\n */\n minBytes: bigint;\n\n /**\n * `max_bytes` specifies that the field value must have no more than the\n * specified number of bytes. If the field value contains more bytes, an\n * error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at most 8 bytes\n * string value = 1 [(buf.validate.field).string.max_bytes = 8];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_bytes = 5;\n */\n maxBytes: bigint;\n\n /**\n * `pattern` specifies that the field value must match the specified\n * regular expression (RE2 syntax), with the expression provided without any\n * delimiters. If the field value doesn't match the regular expression, an\n * error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value does not match regex pattern `^[a-zA-Z]//$`\n * string value = 1 [(buf.validate.field).string.pattern = \"^[a-zA-Z]//$\"];\n * }\n * ```\n *\n * @generated from field: optional string pattern = 6;\n */\n pattern: string;\n\n /**\n * `prefix` specifies that the field value must have the\n * specified substring at the beginning of the string. If the field value\n * doesn't start with the specified prefix, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value does not have prefix `pre`\n * string value = 1 [(buf.validate.field).string.prefix = \"pre\"];\n * }\n * ```\n *\n * @generated from field: optional string prefix = 7;\n */\n prefix: string;\n\n /**\n * `suffix` specifies that the field value must have the\n * specified substring at the end of the string. If the field value doesn't\n * end with the specified suffix, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value does not have suffix `post`\n * string value = 1 [(buf.validate.field).string.suffix = \"post\"];\n * }\n * ```\n *\n * @generated from field: optional string suffix = 8;\n */\n suffix: string;\n\n /**\n * `contains` specifies that the field value must have the\n * specified substring anywhere in the string. If the field value doesn't\n * contain the specified substring, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value does not contain substring `inside`.\n * string value = 1 [(buf.validate.field).string.contains = \"inside\"];\n * }\n * ```\n *\n * @generated from field: optional string contains = 9;\n */\n contains: string;\n\n /**\n * `not_contains` specifies that the field value must not have the\n * specified substring anywhere in the string. If the field value contains\n * the specified substring, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value contains substring `inside`.\n * string value = 1 [(buf.validate.field).string.not_contains = \"inside\"];\n * }\n * ```\n *\n * @generated from field: optional string not_contains = 23;\n */\n notContains: string;\n\n /**\n * `in` specifies that the field value must be equal to one of the specified\n * values. If the field value isn't one of the specified values, an error\n * message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be in list [\"apple\", \"banana\"]\n * string value = 1 [(buf.validate.field).string.in = \"apple\", (buf.validate.field).string.in = \"banana\"];\n * }\n * ```\n *\n * @generated from field: repeated string in = 10;\n */\n in: string[];\n\n /**\n * `not_in` specifies that the field value cannot be equal to any\n * of the specified values. If the field value is one of the specified values,\n * an error message will be generated.\n * ```proto\n * message MyString {\n * // value must not be in list [\"orange\", \"grape\"]\n * string value = 1 [(buf.validate.field).string.not_in = \"orange\", (buf.validate.field).string.not_in = \"grape\"];\n * }\n * ```\n *\n * @generated from field: repeated string not_in = 11;\n */\n notIn: string[];\n\n /**\n * `WellKnown` rules provide advanced rules against common string\n * patterns.\n *\n * @generated from oneof buf.validate.StringRules.well_known\n */\n wellKnown: {\n /**\n * `email` specifies that the field value must be a valid email address, for\n * example \"foo@example.com\".\n *\n * Conforms to the definition for a valid email address from the [HTML standard](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address).\n * Note that this standard willfully deviates from [RFC 5322](https://datatracker.ietf.org/doc/html/rfc5322),\n * which allows many unexpected forms of email addresses and will easily match\n * a typographical error.\n *\n * If the field value isn't a valid email address, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid email address\n * string value = 1 [(buf.validate.field).string.email = true];\n * }\n * ```\n *\n * @generated from field: bool email = 12;\n */\n value: boolean;\n case: \"email\";\n } | {\n /**\n * `hostname` specifies that the field value must be a valid hostname, for\n * example \"foo.example.com\".\n *\n * A valid hostname follows the rules below:\n * - The name consists of one or more labels, separated by a dot (\".\").\n * - Each label can be 1 to 63 alphanumeric characters.\n * - A label can contain hyphens (\"-\"), but must not start or end with a hyphen.\n * - The right-most label must not be digits only.\n * - The name can have a trailing dot—for example, \"foo.example.com.\".\n * - The name can be 253 characters at most, excluding the optional trailing dot.\n *\n * If the field value isn't a valid hostname, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid hostname\n * string value = 1 [(buf.validate.field).string.hostname = true];\n * }\n * ```\n *\n * @generated from field: bool hostname = 13;\n */\n value: boolean;\n case: \"hostname\";\n } | {\n /**\n * `ip` specifies that the field value must be a valid IP (v4 or v6) address.\n *\n * IPv4 addresses are expected in the dotted decimal format—for example, \"192.168.5.21\".\n * IPv6 addresses are expected in their text representation—for example, \"::1\",\n * or \"2001:0DB8:ABCD:0012::0\".\n *\n * Both formats are well-defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).\n * Zone identifiers for IPv6 addresses (for example, \"fe80::a%en1\") are supported.\n *\n * If the field value isn't a valid IP address, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IP address\n * string value = 1 [(buf.validate.field).string.ip = true];\n * }\n * ```\n *\n * @generated from field: bool ip = 14;\n */\n value: boolean;\n case: \"ip\";\n } | {\n /**\n * `ipv4` specifies that the field value must be a valid IPv4 address—for\n * example \"192.168.5.21\". If the field value isn't a valid IPv4 address, an\n * error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv4 address\n * string value = 1 [(buf.validate.field).string.ipv4 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4 = 15;\n */\n value: boolean;\n case: \"ipv4\";\n } | {\n /**\n * `ipv6` specifies that the field value must be a valid IPv6 address—for\n * example \"::1\", or \"d7a:115c:a1e0:ab12:4843:cd96:626b:430b\". If the field\n * value is not a valid IPv6 address, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv6 address\n * string value = 1 [(buf.validate.field).string.ipv6 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6 = 16;\n */\n value: boolean;\n case: \"ipv6\";\n } | {\n /**\n * `uri` specifies that the field value must be a valid URI, for example\n * \"https://example.com/foo/bar?baz=quux#frag\".\n *\n * URI is defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).\n * Zone Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).\n *\n * If the field value isn't a valid URI, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid URI\n * string value = 1 [(buf.validate.field).string.uri = true];\n * }\n * ```\n *\n * @generated from field: bool uri = 17;\n */\n value: boolean;\n case: \"uri\";\n } | {\n /**\n * `uri_ref` specifies that the field value must be a valid URI Reference—either\n * a URI such as \"https://example.com/foo/bar?baz=quux#frag\", or a Relative\n * Reference such as \"./foo/bar?query\".\n *\n * URI, URI Reference, and Relative Reference are defined in the internet\n * standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). Zone\n * Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).\n *\n * If the field value isn't a valid URI Reference, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid URI Reference\n * string value = 1 [(buf.validate.field).string.uri_ref = true];\n * }\n * ```\n *\n * @generated from field: bool uri_ref = 18;\n */\n value: boolean;\n case: \"uriRef\";\n } | {\n /**\n * `address` specifies that the field value must be either a valid hostname\n * (for example, \"example.com\"), or a valid IP (v4 or v6) address (for example,\n * \"192.168.0.1\", or \"::1\"). If the field value isn't a valid hostname or IP,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid hostname, or ip address\n * string value = 1 [(buf.validate.field).string.address = true];\n * }\n * ```\n *\n * @generated from field: bool address = 21;\n */\n value: boolean;\n case: \"address\";\n } | {\n /**\n * `uuid` specifies that the field value must be a valid UUID as defined by\n * [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2). If the\n * field value isn't a valid UUID, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid UUID\n * string value = 1 [(buf.validate.field).string.uuid = true];\n * }\n * ```\n *\n * @generated from field: bool uuid = 22;\n */\n value: boolean;\n case: \"uuid\";\n } | {\n /**\n * `tuuid` (trimmed UUID) specifies that the field value must be a valid UUID as\n * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2) with all dashes\n * omitted. If the field value isn't a valid UUID without dashes, an error message\n * will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid trimmed UUID\n * string value = 1 [(buf.validate.field).string.tuuid = true];\n * }\n * ```\n *\n * @generated from field: bool tuuid = 33;\n */\n value: boolean;\n case: \"tuuid\";\n } | {\n /**\n * `ip_with_prefixlen` specifies that the field value must be a valid IP\n * (v4 or v6) address with prefix length—for example, \"192.168.5.21/16\" or\n * \"2001:0DB8:ABCD:0012::F1/64\". If the field value isn't a valid IP with\n * prefix length, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IP with prefix length\n * string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];\n * }\n * ```\n *\n * @generated from field: bool ip_with_prefixlen = 26;\n */\n value: boolean;\n case: \"ipWithPrefixlen\";\n } | {\n /**\n * `ipv4_with_prefixlen` specifies that the field value must be a valid\n * IPv4 address with prefix length—for example, \"192.168.5.21/16\". If the\n * field value isn't a valid IPv4 address with prefix length, an error\n * message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv4 address with prefix length\n * string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4_with_prefixlen = 27;\n */\n value: boolean;\n case: \"ipv4WithPrefixlen\";\n } | {\n /**\n * `ipv6_with_prefixlen` specifies that the field value must be a valid\n * IPv6 address with prefix length—for example, \"2001:0DB8:ABCD:0012::F1/64\".\n * If the field value is not a valid IPv6 address with prefix length,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv6 address prefix length\n * string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6_with_prefixlen = 28;\n */\n value: boolean;\n case: \"ipv6WithPrefixlen\";\n } | {\n /**\n * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6)\n * prefix—for example, \"192.168.0.0/16\" or \"2001:0DB8:ABCD:0012::0/64\".\n *\n * The prefix must have all zeros for the unmasked bits. For example,\n * \"2001:0DB8:ABCD:0012::0/64\" designates the left-most 64 bits for the\n * prefix, and the remaining 64 bits must be zero.\n *\n * If the field value isn't a valid IP prefix, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IP prefix\n * string value = 1 [(buf.validate.field).string.ip_prefix = true];\n * }\n * ```\n *\n * @generated from field: bool ip_prefix = 29;\n */\n value: boolean;\n case: \"ipPrefix\";\n } | {\n /**\n * `ipv4_prefix` specifies that the field value must be a valid IPv4\n * prefix, for example \"192.168.0.0/16\".\n *\n * The prefix must have all zeros for the unmasked bits. For example,\n * \"192.168.0.0/16\" designates the left-most 16 bits for the prefix,\n * and the remaining 16 bits must be zero.\n *\n * If the field value isn't a valid IPv4 prefix, an error message\n * will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv4 prefix\n * string value = 1 [(buf.validate.field).string.ipv4_prefix = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4_prefix = 30;\n */\n value: boolean;\n case: \"ipv4Prefix\";\n } | {\n /**\n * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix—for\n * example, \"2001:0DB8:ABCD:0012::0/64\".\n *\n * The prefix must have all zeros for the unmasked bits. For example,\n * \"2001:0DB8:ABCD:0012::0/64\" designates the left-most 64 bits for the\n * prefix, and the remaining 64 bits must be zero.\n *\n * If the field value is not a valid IPv6 prefix, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv6 prefix\n * string value = 1 [(buf.validate.field).string.ipv6_prefix = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6_prefix = 31;\n */\n value: boolean;\n case: \"ipv6Prefix\";\n } | {\n /**\n * `host_and_port` specifies that the field value must be valid host/port\n * pair—for example, \"example.com:8080\".\n *\n * The host can be one of:\n * - An IPv4 address in dotted decimal format—for example, \"192.168.5.21\".\n * - An IPv6 address enclosed in square brackets—for example, \"[2001:0DB8:ABCD:0012::F1]\".\n * - A hostname—for example, \"example.com\".\n *\n * The port is separated by a colon. It must be non-empty, with a decimal number\n * in the range of 0-65535, inclusive.\n *\n * @generated from field: bool host_and_port = 32;\n */\n value: boolean;\n case: \"hostAndPort\";\n } | {\n /**\n * `ulid` specifies that the field value must be a valid ULID (Universally Unique\n * Lexicographically Sortable Identifier) as defined by the [ULID specification](https://github.com/ulid/spec).\n * If the field value isn't a valid ULID, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid ULID\n * string value = 1 [(buf.validate.field).string.ulid = true];\n * }\n * ```\n *\n * @generated from field: bool ulid = 35;\n */\n value: boolean;\n case: \"ulid\";\n } | {\n /**\n * `well_known_regex` specifies a common well-known pattern\n * defined as a regex. If the field value doesn't match the well-known\n * regex, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid HTTP header value\n * string value = 1 [(buf.validate.field).string.well_known_regex = KNOWN_REGEX_HTTP_HEADER_VALUE];\n * }\n * ```\n *\n * #### KnownRegex\n *\n * `well_known_regex` contains some well-known patterns.\n *\n * | Name | Number | Description |\n * |-------------------------------|--------|-------------------------------------------|\n * | KNOWN_REGEX_UNSPECIFIED | 0 | |\n * | KNOWN_REGEX_HTTP_HEADER_NAME | 1 | HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2) |\n * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2 | HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4) |\n *\n * @generated from field: buf.validate.KnownRegex well_known_regex = 24;\n */\n value: KnownRegex;\n case: \"wellKnownRegex\";\n } | { case: undefined; value?: undefined };\n\n /**\n * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to\n * enable strict header validation. By default, this is true, and HTTP header\n * validations are [RFC-compliant](https://datatracker.ietf.org/doc/html/rfc7230#section-3). Setting to false will enable looser\n * validations that only disallow `\\r\\n\\0` characters, which can be used to\n * bypass header matching rules.\n *\n * ```proto\n * message MyString {\n * // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.\n * string value = 1 [(buf.validate.field).string.strict = false];\n * }\n * ```\n *\n * @generated from field: optional bool strict = 25;\n */\n strict: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyString {\n * string value = 1 [\n * (buf.validate.field).string.example = \"hello\",\n * (buf.validate.field).string.example = \"world\"\n * ];\n * }\n * ```\n *\n * @generated from field: repeated string example = 34;\n */\n example: string[];\n};\n\n/**\n * Describes the message buf.validate.StringRules.\n * Use `create(StringRulesSchema)` to create a new message.\n */\nexport const StringRulesSchema: GenMessage<StringRules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 19);\n\n/**\n * BytesRules describe the rules applied to `bytes` values. These rules\n * may also be applied to the `google.protobuf.BytesValue` Well-Known-Type.\n *\n * @generated from message buf.validate.BytesRules\n */\nexport type BytesRules = Message<\"buf.validate.BytesRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified bytes\n * value. If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be \"\\x01\\x02\\x03\\x04\"\n * bytes value = 1 [(buf.validate.field).bytes.const = \"\\x01\\x02\\x03\\x04\"];\n * }\n * ```\n *\n * @generated from field: optional bytes const = 1;\n */\n const: Uint8Array;\n\n /**\n * `len` requires the field value to have the specified length in bytes.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value length must be 4 bytes.\n * optional bytes value = 1 [(buf.validate.field).bytes.len = 4];\n * }\n * ```\n *\n * @generated from field: optional uint64 len = 13;\n */\n len: bigint;\n\n /**\n * `min_len` requires the field value to have at least the specified minimum\n * length in bytes.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value length must be at least 2 bytes.\n * optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_len = 2;\n */\n minLen: bigint;\n\n /**\n * `max_len` requires the field value to have at most the specified maximum\n * length in bytes.\n * If the field value exceeds the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be at most 6 bytes.\n * optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_len = 3;\n */\n maxLen: bigint;\n\n /**\n * `pattern` requires the field value to match the specified regular\n * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).\n * The value of the field must be valid UTF-8 or validation will fail with a\n * runtime error.\n * If the field value doesn't match the pattern, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must match regex pattern \"^[a-zA-Z0-9]+$\".\n * optional bytes value = 1 [(buf.validate.field).bytes.pattern = \"^[a-zA-Z0-9]+$\"];\n * }\n * ```\n *\n * @generated from field: optional string pattern = 4;\n */\n pattern: string;\n\n /**\n * `prefix` requires the field value to have the specified bytes at the\n * beginning of the string.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value does not have prefix \\x01\\x02\n * optional bytes value = 1 [(buf.validate.field).bytes.prefix = \"\\x01\\x02\"];\n * }\n * ```\n *\n * @generated from field: optional bytes prefix = 5;\n */\n prefix: Uint8Array;\n\n /**\n * `suffix` requires the field value to have the specified bytes at the end\n * of the string.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value does not have suffix \\x03\\x04\n * optional bytes value = 1 [(buf.validate.field).bytes.suffix = \"\\x03\\x04\"];\n * }\n * ```\n *\n * @generated from field: optional bytes suffix = 6;\n */\n suffix: Uint8Array;\n\n /**\n * `contains` requires the field value to have the specified bytes anywhere in\n * the string.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value does not contain \\x02\\x03\n * optional bytes value = 1 [(buf.validate.field).bytes.contains = \"\\x02\\x03\"];\n * }\n * ```\n *\n * @generated from field: optional bytes contains = 7;\n */\n contains: Uint8Array;\n\n /**\n * `in` requires the field value to be equal to one of the specified\n * values. If the field value doesn't match any of the specified values, an\n * error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must in [\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"]\n * optional bytes value = 1 [(buf.validate.field).bytes.in = {\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"}];\n * }\n * ```\n *\n * @generated from field: repeated bytes in = 8;\n */\n in: Uint8Array[];\n\n /**\n * `not_in` requires the field value to be not equal to any of the specified\n * values.\n * If the field value matches any of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyBytes {\n * // value must not in [\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"]\n * optional bytes value = 1 [(buf.validate.field).bytes.not_in = {\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"}];\n * }\n * ```\n *\n * @generated from field: repeated bytes not_in = 9;\n */\n notIn: Uint8Array[];\n\n /**\n * WellKnown rules provide advanced rules against common byte\n * patterns\n *\n * @generated from oneof buf.validate.BytesRules.well_known\n */\n wellKnown: {\n /**\n * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.\n * If the field value doesn't meet this rule, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be a valid IP address\n * optional bytes value = 1 [(buf.validate.field).bytes.ip = true];\n * }\n * ```\n *\n * @generated from field: bool ip = 10;\n */\n value: boolean;\n case: \"ip\";\n } | {\n /**\n * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.\n * If the field value doesn't meet this rule, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be a valid IPv4 address\n * optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4 = 11;\n */\n value: boolean;\n case: \"ipv4\";\n } | {\n /**\n * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.\n * If the field value doesn't meet this rule, an error message is generated.\n * ```proto\n * message MyBytes {\n * // value must be a valid IPv6 address\n * optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6 = 12;\n */\n value: boolean;\n case: \"ipv6\";\n } | {\n /**\n * `uuid` ensures that the field `value` encodes the 128-bit UUID data as\n * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2).\n * The field must contain exactly 16 bytes\n * representing the UUID. If the field value isn't a valid UUID, an error\n * message will be generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be a valid UUID\n * optional bytes value = 1 [(buf.validate.field).bytes.uuid = true];\n * }\n * ```\n *\n * @generated from field: bool uuid = 15;\n */\n value: boolean;\n case: \"uuid\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyBytes {\n * bytes value = 1 [\n * (buf.validate.field).bytes.example = \"\\x01\\x02\",\n * (buf.validate.field).bytes.example = \"\\x02\\x03\"\n * ];\n * }\n * ```\n *\n * @generated from field: repeated bytes example = 14;\n */\n example: Uint8Array[];\n};\n\n/**\n * Describes the message buf.validate.BytesRules.\n * Use `create(BytesRulesSchema)` to create a new message.\n */\nexport const BytesRulesSchema: GenMessage<BytesRules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 20);\n\n/**\n * EnumRules describe the rules applied to `enum` values.\n *\n * @generated from message buf.validate.EnumRules\n */\nexport type EnumRules = Message<\"buf.validate.EnumRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified enum value.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must be exactly MY_ENUM_VALUE1.\n * MyEnum value = 1 [(buf.validate.field).enum.const = 1];\n * }\n * ```\n *\n * @generated from field: optional int32 const = 1;\n */\n const: number;\n\n /**\n * `defined_only` requires the field value to be one of the defined values for\n * this enum, failing on any undefined value.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must be a defined value of MyEnum.\n * MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];\n * }\n * ```\n *\n * @generated from field: optional bool defined_only = 2;\n */\n definedOnly: boolean;\n\n /**\n * `in` requires the field value to be equal to one of the\n * specified enum values. If the field value doesn't match any of the\n * specified values, an error message is generated.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must be equal to one of the specified values.\n * MyEnum value = 1 [(buf.validate.field).enum = { in: [1, 2]}];\n * }\n * ```\n *\n * @generated from field: repeated int32 in = 3;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to be not equal to any of the\n * specified enum values. If the field value matches one of the specified\n * values, an error message is generated.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must not be equal to any of the specified values.\n * MyEnum value = 1 [(buf.validate.field).enum = { not_in: [1, 2]}];\n * }\n * ```\n *\n * @generated from field: repeated int32 not_in = 4;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * (buf.validate.field).enum.example = 1,\n * (buf.validate.field).enum.example = 2\n * }\n * ```\n *\n * @generated from field: repeated int32 example = 5;\n */\n example: number[];\n};\n\n/**\n * Describes the message buf.validate.EnumRules.\n * Use `create(EnumRulesSchema)` to create a new message.\n */\nexport const EnumRulesSchema: GenMessage<EnumRules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 21);\n\n/**\n * RepeatedRules describe the rules applied to `repeated` values.\n *\n * @generated from message buf.validate.RepeatedRules\n */\nexport type RepeatedRules = Message<\"buf.validate.RepeatedRules\"> & {\n /**\n * `min_items` requires that this field must contain at least the specified\n * minimum number of items.\n *\n * Note that `min_items = 1` is equivalent to setting a field as `required`.\n *\n * ```proto\n * message MyRepeated {\n * // value must contain at least 2 items\n * repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_items = 1;\n */\n minItems: bigint;\n\n /**\n * `max_items` denotes that this field must not exceed a\n * certain number of items as the upper limit. If the field contains more\n * items than specified, an error message will be generated, requiring the\n * field to maintain no more than the specified number of items.\n *\n * ```proto\n * message MyRepeated {\n * // value must contain no more than 3 item(s)\n * repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_items = 2;\n */\n maxItems: bigint;\n\n /**\n * `unique` indicates that all elements in this field must\n * be unique. This rule is strictly applicable to scalar and enum\n * types, with message types not being supported.\n *\n * ```proto\n * message MyRepeated {\n * // repeated value must contain unique items\n * repeated string value = 1 [(buf.validate.field).repeated.unique = true];\n * }\n * ```\n *\n * @generated from field: optional bool unique = 3;\n */\n unique: boolean;\n\n /**\n * `items` details the rules to be applied to each item\n * in the field. Even for repeated message fields, validation is executed\n * against each item unless `ignore` is specified.\n *\n * ```proto\n * message MyRepeated {\n * // The items in the field `value` must follow the specified rules.\n * repeated string value = 1 [(buf.validate.field).repeated.items = {\n * string: {\n * min_len: 3\n * max_len: 10\n * }\n * }];\n * }\n * ```\n *\n * Note that the `required` rule does not apply. Repeated items\n * cannot be unset.\n *\n * @generated from field: optional buf.validate.FieldRules items = 4;\n */\n items?: FieldRules;\n};\n\n/**\n * Describes the message buf.validate.RepeatedRules.\n * Use `create(RepeatedRulesSchema)` to create a new message.\n */\nexport const RepeatedRulesSchema: GenMessage<RepeatedRules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 22);\n\n/**\n * MapRules describe the rules applied to `map` values.\n *\n * @generated from message buf.validate.MapRules\n */\nexport type MapRules = Message<\"buf.validate.MapRules\"> & {\n /**\n * Specifies the minimum number of key-value pairs allowed. If the field has\n * fewer key-value pairs than specified, an error message is generated.\n *\n * ```proto\n * message MyMap {\n * // The field `value` must have at least 2 key-value pairs.\n * map<string, string> value = 1 [(buf.validate.field).map.min_pairs = 2];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_pairs = 1;\n */\n minPairs: bigint;\n\n /**\n * Specifies the maximum number of key-value pairs allowed. If the field has\n * more key-value pairs than specified, an error message is generated.\n *\n * ```proto\n * message MyMap {\n * // The field `value` must have at most 3 key-value pairs.\n * map<string, string> value = 1 [(buf.validate.field).map.max_pairs = 3];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_pairs = 2;\n */\n maxPairs: bigint;\n\n /**\n * Specifies the rules to be applied to each key in the field.\n *\n * ```proto\n * message MyMap {\n * // The keys in the field `value` must follow the specified rules.\n * map<string, string> value = 1 [(buf.validate.field).map.keys = {\n * string: {\n * min_len: 3\n * max_len: 10\n * }\n * }];\n * }\n * ```\n *\n * Note that the `required` rule does not apply. Map keys cannot be unset.\n *\n * @generated from field: optional buf.validate.FieldRules keys = 4;\n */\n keys?: FieldRules;\n\n /**\n * Specifies the rules to be applied to the value of each key in the\n * field. Message values will still have their validations evaluated unless\n * `ignore` is specified.\n *\n * ```proto\n * message MyMap {\n * // The values in the field `value` must follow the specified rules.\n * map<string, string> value = 1 [(buf.validate.field).map.values = {\n * string: {\n * min_len: 5\n * max_len: 20\n * }\n * }];\n * }\n * ```\n * Note that the `required` rule does not apply. Map values cannot be unset.\n *\n * @generated from field: optional buf.validate.FieldRules values = 5;\n */\n values?: FieldRules;\n};\n\n/**\n * Describes the message buf.validate.MapRules.\n * Use `create(MapRulesSchema)` to create a new message.\n */\nexport const MapRulesSchema: GenMessage<MapRules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 23);\n\n/**\n * AnyRules describe rules applied exclusively to the `google.protobuf.Any` well-known type.\n *\n * @generated from message buf.validate.AnyRules\n */\nexport type AnyRules = Message<\"buf.validate.AnyRules\"> & {\n /**\n * `in` requires the field's `type_url` to be equal to one of the\n * specified values. If it doesn't match any of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyAny {\n * // The `value` field must have a `type_url` equal to one of the specified values.\n * google.protobuf.Any value = 1 [(buf.validate.field).any = {\n * in: [\"type.googleapis.com/MyType1\", \"type.googleapis.com/MyType2\"]\n * }];\n * }\n * ```\n *\n * @generated from field: repeated string in = 2;\n */\n in: string[];\n\n /**\n * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.\n *\n * ```proto\n * message MyAny {\n * // The `value` field must not have a `type_url` equal to any of the specified values.\n * google.protobuf.Any value = 1 [(buf.validate.field).any = {\n * not_in: [\"type.googleapis.com/ForbiddenType1\", \"type.googleapis.com/ForbiddenType2\"]\n * }];\n * }\n * ```\n *\n * @generated from field: repeated string not_in = 3;\n */\n notIn: string[];\n};\n\n/**\n * Describes the message buf.validate.AnyRules.\n * Use `create(AnyRulesSchema)` to create a new message.\n */\nexport const AnyRulesSchema: GenMessage<AnyRules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 24);\n\n/**\n * DurationRules describe the rules applied exclusively to the `google.protobuf.Duration` well-known type.\n *\n * @generated from message buf.validate.DurationRules\n */\nexport type DurationRules = Message<\"buf.validate.DurationRules\"> & {\n /**\n * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.\n * If the field's value deviates from the specified value, an error message\n * will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must equal 5s\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = \"5s\"];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.Duration const = 2;\n */\n const?: Duration;\n\n /**\n * @generated from oneof buf.validate.DurationRules.less_than\n */\n lessThan: {\n /**\n * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,\n * exclusive. If the field's value is greater than or equal to the specified\n * value, an error message will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must be less than 5s\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = \"5s\"];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration lt = 3;\n */\n value: Duration;\n case: \"lt\";\n } | {\n /**\n * `lte` indicates that the field must be less than or equal to the specified\n * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,\n * an error message will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must be less than or equal to 10s\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = \"10s\"];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration lte = 4;\n */\n value: Duration;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.DurationRules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the duration field value to be greater than the specified\n * value (exclusive). If the value of `gt` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyDuration {\n * // duration must be greater than 5s [duration.gt]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];\n *\n * // duration must be greater than 5s and less than 10s [duration.gt_lt]\n * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];\n *\n * // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]\n * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration gt = 5;\n */\n value: Duration;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the duration field value to be greater than or equal to the\n * specified value (exclusive). If the value of `gte` is larger than a\n * specified `lt` or `lte`, the range is reversed, and the field value must\n * be outside the specified range. If the field value doesn't meet the\n * required conditions, an error message is generated.\n *\n * ```proto\n * message MyDuration {\n * // duration must be greater than or equal to 5s [duration.gte]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];\n *\n * // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]\n * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];\n *\n * // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]\n * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration gte = 6;\n */\n value: Duration;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.\n * If the field's value doesn't correspond to any of the specified values,\n * an error message will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must be in list [1s, 2s, 3s]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = [\"1s\", \"2s\", \"3s\"]];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Duration in = 7;\n */\n in: Duration[];\n\n /**\n * `not_in` denotes that the field must not be equal to\n * any of the specified values of the `google.protobuf.Duration` type.\n * If the field's value matches any of these values, an error message will be\n * generated.\n *\n * ```proto\n * message MyDuration {\n * // value must not be in list [1s, 2s, 3s]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = [\"1s\", \"2s\", \"3s\"]];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Duration not_in = 8;\n */\n notIn: Duration[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyDuration {\n * google.protobuf.Duration value = 1 [\n * (buf.validate.field).duration.example = { seconds: 1 },\n * (buf.validate.field).duration.example = { seconds: 2 },\n * ];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Duration example = 9;\n */\n example: Duration[];\n};\n\n/**\n * Describes the message buf.validate.DurationRules.\n * Use `create(DurationRulesSchema)` to create a new message.\n */\nexport const DurationRulesSchema: GenMessage<DurationRules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 25);\n\n/**\n * FieldMaskRules describe rules applied exclusively to the `google.protobuf.FieldMask` well-known type.\n *\n * @generated from message buf.validate.FieldMaskRules\n */\nexport type FieldMaskRules = Message<\"buf.validate.FieldMaskRules\"> & {\n /**\n * `const` dictates that the field must match the specified value of the `google.protobuf.FieldMask` type exactly.\n * If the field's value deviates from the specified value, an error message\n * will be generated.\n *\n * ```proto\n * message MyFieldMask {\n * // value must equal [\"a\"]\n * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask.const = {\n * paths: [\"a\"]\n * }];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.FieldMask const = 1;\n */\n const?: FieldMask;\n\n /**\n * `in` requires the field value to only contain paths matching specified\n * values or their subpaths.\n * If any of the field value's paths doesn't match the rule,\n * an error message is generated.\n * See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask\n *\n * ```proto\n * message MyFieldMask {\n * // The `value` FieldMask must only contain paths listed in `in`.\n * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = {\n * in: [\"a\", \"b\", \"c.a\"]\n * }];\n * }\n * ```\n *\n * @generated from field: repeated string in = 2;\n */\n in: string[];\n\n /**\n * `not_in` requires the field value to not contain paths matching specified\n * values or their subpaths.\n * If any of the field value's paths matches the rule,\n * an error message is generated.\n * See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask\n *\n * ```proto\n * message MyFieldMask {\n * // The `value` FieldMask shall not contain paths listed in `not_in`.\n * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = {\n * not_in: [\"forbidden\", \"immutable\", \"c.a\"]\n * }];\n * }\n * ```\n *\n * @generated from field: repeated string not_in = 3;\n */\n notIn: string[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFieldMask {\n * google.protobuf.FieldMask value = 1 [\n * (buf.validate.field).field_mask.example = { paths: [\"a\", \"b\"] },\n * (buf.validate.field).field_mask.example = { paths: [\"c.a\", \"d\"] },\n * ];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.FieldMask example = 4;\n */\n example: FieldMask[];\n};\n\n/**\n * Describes the message buf.validate.FieldMaskRules.\n * Use `create(FieldMaskRulesSchema)` to create a new message.\n */\nexport const FieldMaskRulesSchema: GenMessage<FieldMaskRules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 26);\n\n/**\n * TimestampRules describe the rules applied exclusively to the `google.protobuf.Timestamp` well-known type.\n *\n * @generated from message buf.validate.TimestampRules\n */\nexport type TimestampRules = Message<\"buf.validate.TimestampRules\"> & {\n /**\n * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.\n *\n * ```proto\n * message MyTimestamp {\n * // value must equal 2023-05-03T10:00:00Z\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.Timestamp const = 2;\n */\n const?: Timestamp;\n\n /**\n * @generated from oneof buf.validate.TimestampRules.less_than\n */\n lessThan: {\n /**\n * requires the duration field value to be less than the specified value (field < value). If the field value doesn't meet the required conditions, an error message is generated.\n *\n * ```proto\n * message MyDuration {\n * // duration must be less than 'P3D' [duration.lt]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp lt = 3;\n */\n value: Timestamp;\n case: \"lt\";\n } | {\n /**\n * requires the timestamp field value to be less than or equal to the specified value (field <= value). If the field value doesn't meet the required conditions, an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]\n * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp lte = 4;\n */\n value: Timestamp;\n case: \"lte\";\n } | {\n /**\n * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.\n *\n * ```proto\n * message MyTimestamp {\n * // value must be less than now\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];\n * }\n * ```\n *\n * @generated from field: bool lt_now = 7;\n */\n value: boolean;\n case: \"ltNow\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.TimestampRules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the timestamp field value to be greater than the specified\n * value (exclusive). If the value of `gt` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]\n * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];\n *\n * // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]\n * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];\n *\n * // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]\n * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp gt = 5;\n */\n value: Timestamp;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the timestamp field value to be greater than or equal to the\n * specified value (exclusive). If the value of `gte` is larger than a\n * specified `lt` or `lte`, the range is reversed, and the field value\n * must be outside the specified range. If the field value doesn't meet\n * the required conditions, an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]\n * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];\n *\n * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]\n * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];\n *\n * // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]\n * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp gte = 6;\n */\n value: Timestamp;\n case: \"gte\";\n } | {\n /**\n * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.\n *\n * ```proto\n * message MyTimestamp {\n * // value must be greater than now\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];\n * }\n * ```\n *\n * @generated from field: bool gt_now = 8;\n */\n value: boolean;\n case: \"gtNow\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // value must be within 1 hour of now\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.Duration within = 9;\n */\n within?: Duration;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyTimestamp {\n * google.protobuf.Timestamp value = 1 [\n * (buf.validate.field).timestamp.example = { seconds: 1672444800 },\n * (buf.validate.field).timestamp.example = { seconds: 1672531200 },\n * ];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Timestamp example = 10;\n */\n example: Timestamp[];\n};\n\n/**\n * Describes the message buf.validate.TimestampRules.\n * Use `create(TimestampRulesSchema)` to create a new message.\n */\nexport const TimestampRulesSchema: GenMessage<TimestampRules> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 27);\n\n/**\n * `Violations` is a collection of `Violation` messages. This message type is returned by\n * Protovalidate when a proto message fails to meet the requirements set by the `Rule` validation rules.\n * Each individual violation is represented by a `Violation` message.\n *\n * @generated from message buf.validate.Violations\n */\nexport type Violations = Message<\"buf.validate.Violations\"> & {\n /**\n * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.\n *\n * @generated from field: repeated buf.validate.Violation violations = 1;\n */\n violations: Violation[];\n};\n\n/**\n * Describes the message buf.validate.Violations.\n * Use `create(ViolationsSchema)` to create a new message.\n */\nexport const ViolationsSchema: GenMessage<Violations> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 28);\n\n/**\n * `Violation` represents a single instance where a validation rule, expressed\n * as a `Rule`, was not met. It provides information about the field that\n * caused the violation, the specific rule that wasn't fulfilled, and a\n * human-readable error message.\n *\n * For example, consider the following message:\n *\n * ```proto\n * message User {\n * int32 age = 1 [(buf.validate.field).cel = {\n * id: \"user.age\",\n * expression: \"this < 18 ? 'User must be at least 18 years old' : ''\",\n * }];\n * }\n * ```\n *\n * It could produce the following violation:\n *\n * ```json\n * {\n * \"ruleId\": \"user.age\",\n * \"message\": \"User must be at least 18 years old\",\n * \"field\": {\n * \"elements\": [\n * {\n * \"fieldNumber\": 1,\n * \"fieldName\": \"age\",\n * \"fieldType\": \"TYPE_INT32\"\n * }\n * ]\n * },\n * \"rule\": {\n * \"elements\": [\n * {\n * \"fieldNumber\": 23,\n * \"fieldName\": \"cel\",\n * \"fieldType\": \"TYPE_MESSAGE\",\n * \"index\": \"0\"\n * }\n * ]\n * }\n * }\n * ```\n *\n * @generated from message buf.validate.Violation\n */\nexport type Violation = Message<\"buf.validate.Violation\"> & {\n /**\n * `field` is a machine-readable path to the field that failed validation.\n * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.\n *\n * For example, consider the following message:\n *\n * ```proto\n * message Message {\n * bool a = 1 [(buf.validate.field).required = true];\n * }\n * ```\n *\n * It could produce the following violation:\n *\n * ```textproto\n * violation {\n * field { element { field_number: 1, field_name: \"a\", field_type: 8 } }\n * ...\n * }\n * ```\n *\n * @generated from field: optional buf.validate.FieldPath field = 5;\n */\n field?: FieldPath;\n\n /**\n * `rule` is a machine-readable path that points to the specific rule that failed validation.\n * This will be a nested field starting from the FieldRules of the field that failed validation.\n * For custom rules, this will provide the path of the rule, e.g. `cel[0]`.\n *\n * For example, consider the following message:\n *\n * ```proto\n * message Message {\n * bool a = 1 [(buf.validate.field).required = true];\n * bool b = 2 [(buf.validate.field).cel = {\n * id: \"custom_rule\",\n * expression: \"!this ? 'b must be true': ''\"\n * }]\n * }\n * ```\n *\n * It could produce the following violations:\n *\n * ```textproto\n * violation {\n * rule { element { field_number: 25, field_name: \"required\", field_type: 8 } }\n * ...\n * }\n * violation {\n * rule { element { field_number: 23, field_name: \"cel\", field_type: 11, index: 0 } }\n * ...\n * }\n * ```\n *\n * @generated from field: optional buf.validate.FieldPath rule = 6;\n */\n rule?: FieldPath;\n\n /**\n * `rule_id` is the unique identifier of the `Rule` that was not fulfilled.\n * This is the same `id` that was specified in the `Rule` message, allowing easy tracing of which rule was violated.\n *\n * @generated from field: optional string rule_id = 2;\n */\n ruleId: string;\n\n /**\n * `message` is a human-readable error message that describes the nature of the violation.\n * This can be the default error message from the violated `Rule`, or it can be a custom message that gives more context about the violation.\n *\n * @generated from field: optional string message = 3;\n */\n message: string;\n\n /**\n * `for_key` indicates whether the violation was caused by a map key, rather than a value.\n *\n * @generated from field: optional bool for_key = 4;\n */\n forKey: boolean;\n};\n\n/**\n * Describes the message buf.validate.Violation.\n * Use `create(ViolationSchema)` to create a new message.\n */\nexport const ViolationSchema: GenMessage<Violation> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 29);\n\n/**\n * `FieldPath` provides a path to a nested protobuf field.\n *\n * This message provides enough information to render a dotted field path even without protobuf descriptors.\n * It also provides enough information to resolve a nested field through unknown wire data.\n *\n * @generated from message buf.validate.FieldPath\n */\nexport type FieldPath = Message<\"buf.validate.FieldPath\"> & {\n /**\n * `elements` contains each element of the path, starting from the root and recursing downward.\n *\n * @generated from field: repeated buf.validate.FieldPathElement elements = 1;\n */\n elements: FieldPathElement[];\n};\n\n/**\n * Describes the message buf.validate.FieldPath.\n * Use `create(FieldPathSchema)` to create a new message.\n */\nexport const FieldPathSchema: GenMessage<FieldPath> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 30);\n\n/**\n * `FieldPathElement` provides enough information to nest through a single protobuf field.\n *\n * If the selected field is a map or repeated field, the `subscript` value selects a specific element from it.\n * A path that refers to a value nested under a map key or repeated field index will have a `subscript` value.\n * The `field_type` field allows unambiguous resolution of a field even if descriptors are not available.\n *\n * @generated from message buf.validate.FieldPathElement\n */\nexport type FieldPathElement = Message<\"buf.validate.FieldPathElement\"> & {\n /**\n * `field_number` is the field number this path element refers to.\n *\n * @generated from field: optional int32 field_number = 1;\n */\n fieldNumber: number;\n\n /**\n * `field_name` contains the field name this path element refers to.\n * This can be used to display a human-readable path even if the field number is unknown.\n *\n * @generated from field: optional string field_name = 2;\n */\n fieldName: string;\n\n /**\n * `field_type` specifies the type of this field. When using reflection, this value is not needed.\n *\n * This value is provided to make it possible to traverse unknown fields through wire data.\n * When traversing wire data, be mindful of both packed[1] and delimited[2] encoding schemes.\n *\n * [1]: https://protobuf.dev/programming-guides/encoding/#packed\n * [2]: https://protobuf.dev/programming-guides/encoding/#groups\n *\n * N.B.: Although groups are deprecated, the corresponding delimited encoding scheme is not, and\n * can be explicitly used in Protocol Buffers 2023 Edition.\n *\n * @generated from field: optional google.protobuf.FieldDescriptorProto.Type field_type = 3;\n */\n fieldType: FieldDescriptorProto_Type;\n\n /**\n * `key_type` specifies the map key type of this field. This value is useful when traversing\n * unknown fields through wire data: specifically, it allows handling the differences between\n * different integer encodings.\n *\n * @generated from field: optional google.protobuf.FieldDescriptorProto.Type key_type = 4;\n */\n keyType: FieldDescriptorProto_Type;\n\n /**\n * `value_type` specifies map value type of this field. This is useful if you want to display a\n * value inside unknown fields through wire data.\n *\n * @generated from field: optional google.protobuf.FieldDescriptorProto.Type value_type = 5;\n */\n valueType: FieldDescriptorProto_Type;\n\n /**\n * `subscript` contains a repeated index or map key, if this path element nests into a repeated or map field.\n *\n * @generated from oneof buf.validate.FieldPathElement.subscript\n */\n subscript: {\n /**\n * `index` specifies a 0-based index into a repeated field.\n *\n * @generated from field: uint64 index = 6;\n */\n value: bigint;\n case: \"index\";\n } | {\n /**\n * `bool_key` specifies a map key of type bool.\n *\n * @generated from field: bool bool_key = 7;\n */\n value: boolean;\n case: \"boolKey\";\n } | {\n /**\n * `int_key` specifies a map key of type int32, int64, sint32, sint64, sfixed32 or sfixed64.\n *\n * @generated from field: int64 int_key = 8;\n */\n value: bigint;\n case: \"intKey\";\n } | {\n /**\n * `uint_key` specifies a map key of type uint32, uint64, fixed32 or fixed64.\n *\n * @generated from field: uint64 uint_key = 9;\n */\n value: bigint;\n case: \"uintKey\";\n } | {\n /**\n * `string_key` specifies a map key of type string.\n *\n * @generated from field: string string_key = 10;\n */\n value: string;\n case: \"stringKey\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * Describes the message buf.validate.FieldPathElement.\n * Use `create(FieldPathElementSchema)` to create a new message.\n */\nexport const FieldPathElementSchema: GenMessage<FieldPathElement> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 31);\n\n/**\n * Specifies how `FieldRules.ignore` behaves, depending on the field's value, and\n * whether the field tracks presence.\n *\n * @generated from enum buf.validate.Ignore\n */\nexport enum Ignore {\n /**\n * Ignore rules if the field tracks presence and is unset. This is the default\n * behavior.\n *\n * In proto3, only message fields, members of a Protobuf `oneof`, and fields\n * with the `optional` label track presence. Consequently, the following fields\n * are always validated, whether a value is set or not:\n *\n * ```proto\n * syntax=\"proto3\";\n *\n * message RulesApply {\n * string email = 1 [\n * (buf.validate.field).string.email = true\n * ];\n * int32 age = 2 [\n * (buf.validate.field).int32.gt = 0\n * ];\n * repeated string labels = 3 [\n * (buf.validate.field).repeated.min_items = 1\n * ];\n * }\n * ```\n *\n * In contrast, the following fields track presence, and are only validated if\n * a value is set:\n *\n * ```proto\n * syntax=\"proto3\";\n *\n * message RulesApplyIfSet {\n * optional string email = 1 [\n * (buf.validate.field).string.email = true\n * ];\n * oneof ref {\n * string reference = 2 [\n * (buf.validate.field).string.uuid = true\n * ];\n * string name = 3 [\n * (buf.validate.field).string.min_len = 4\n * ];\n * }\n * SomeMessage msg = 4 [\n * (buf.validate.field).cel = {/* ... *\\/}\n * ];\n * }\n * ```\n *\n * To ensure that such a field is set, add the `required` rule.\n *\n * To learn which fields track presence, see the\n * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).\n *\n * @generated from enum value: IGNORE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * Ignore rules if the field is unset, or set to the zero value.\n *\n * The zero value depends on the field type:\n * - For strings, the zero value is the empty string.\n * - For bytes, the zero value is empty bytes.\n * - For bool, the zero value is false.\n * - For numeric types, the zero value is zero.\n * - For enums, the zero value is the first defined enum value.\n * - For repeated fields, the zero is an empty list.\n * - For map fields, the zero is an empty map.\n * - For message fields, absence of the message (typically a null-value) is considered zero value.\n *\n * For fields that track presence (e.g. adding the `optional` label in proto3),\n * this a no-op and behavior is the same as the default `IGNORE_UNSPECIFIED`.\n *\n * @generated from enum value: IGNORE_IF_ZERO_VALUE = 1;\n */\n IF_ZERO_VALUE = 1,\n\n /**\n * Always ignore rules, including the `required` rule.\n *\n * This is useful for ignoring the rules of a referenced message, or to\n * temporarily ignore rules during development.\n *\n * ```proto\n * message MyMessage {\n * // The field's rules will always be ignored, including any validations\n * // on value's fields.\n * MyOtherMessage value = 1 [\n * (buf.validate.field).ignore = IGNORE_ALWAYS\n * ];\n * }\n * ```\n *\n * @generated from enum value: IGNORE_ALWAYS = 3;\n */\n ALWAYS = 3,\n}\n\n/**\n * Describes the enum buf.validate.Ignore.\n */\nexport const IgnoreSchema: GenEnum<Ignore> = /*@__PURE__*/\n enumDesc(file_buf_validate_validate, 0);\n\n/**\n * KnownRegex contains some well-known patterns.\n *\n * @generated from enum buf.validate.KnownRegex\n */\nexport enum KnownRegex {\n /**\n * @generated from enum value: KNOWN_REGEX_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2).\n *\n * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_NAME = 1;\n */\n HTTP_HEADER_NAME = 1,\n\n /**\n * HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4).\n *\n * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_VALUE = 2;\n */\n HTTP_HEADER_VALUE = 2,\n}\n\n/**\n * Describes the enum buf.validate.KnownRegex.\n */\nexport const KnownRegexSchema: GenEnum<KnownRegex> = /*@__PURE__*/\n enumDesc(file_buf_validate_validate, 1);\n\n/**\n * Rules specify the validations to be performed on this message. By default,\n * no validation is performed against a message.\n *\n * @generated from extension: optional buf.validate.MessageRules message = 1159;\n */\nexport const message: GenExtension<MessageOptions, MessageRules> = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 0);\n\n/**\n * Rules specify the validations to be performed on this oneof. By default,\n * no validation is performed against a oneof.\n *\n * @generated from extension: optional buf.validate.OneofRules oneof = 1159;\n */\nexport const oneof: GenExtension<OneofOptions, OneofRules> = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 1);\n\n/**\n * Rules specify the validations to be performed on this field. By default,\n * no validation is performed against a field.\n *\n * @generated from extension: optional buf.validate.FieldRules field = 1159;\n */\nexport const field: GenExtension<FieldOptions, FieldRules> = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 2);\n\n/**\n * Specifies predefined rules. When extending a standard rule message,\n * this adds additional CEL expressions that apply when the extension is used.\n *\n * ```proto\n * extend buf.validate.Int32Rules {\n * bool is_zero [(buf.validate.predefined).cel = {\n * id: \"int32.is_zero\",\n * message: \"value must be zero\",\n * expression: \"!rule || this == 0\",\n * }];\n * }\n *\n * message Foo {\n * int32 reserved = 1 [(buf.validate.field).int32.(is_zero) = true];\n * }\n * ```\n *\n * @generated from extension: optional buf.validate.PredefinedRules predefined = 1160;\n */\nexport const predefined: GenExtension<FieldOptions, PredefinedRules> = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 3);\n\n","// Copyright 2025 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file google/api/field_behavior.proto (package google.api, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenExtension, GenFile } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, extDesc, fileDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { FieldOptions } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_descriptor } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file google/api/field_behavior.proto.\n */\nexport const file_google_api_field_behavior: GenFile = /*@__PURE__*/\n fileDesc(\"Ch9nb29nbGUvYXBpL2ZpZWxkX2JlaGF2aW9yLnByb3RvEgpnb29nbGUuYXBpKrYBCg1GaWVsZEJlaGF2aW9yEh4KGkZJRUxEX0JFSEFWSU9SX1VOU1BFQ0lGSUVEEAASDAoIT1BUSU9OQUwQARIMCghSRVFVSVJFRBACEg8KC09VVFBVVF9PTkxZEAMSDgoKSU5QVVRfT05MWRAEEg0KCUlNTVVUQUJMRRAFEhIKDlVOT1JERVJFRF9MSVNUEAYSFQoRTk9OX0VNUFRZX0RFRkFVTFQQBxIOCgpJREVOVElGSUVSEAg6ZAoOZmllbGRfYmVoYXZpb3ISHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGJwIIAMoDjIZLmdvb2dsZS5hcGkuRmllbGRCZWhhdmlvckICEABSDWZpZWxkQmVoYXZpb3JCsAEKDmNvbS5nb29nbGUuYXBpQhJGaWVsZEJlaGF2aW9yUHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnOiAgNHQViqAgpHb29nbGUuQXBpygIKR29vZ2xlXEFwaeICFkdvb2dsZVxBcGlcR1BCTWV0YWRhdGHqAgtHb29nbGU6OkFwaWIGcHJvdG8z\", [file_google_protobuf_descriptor]);\n\n/**\n * An indicator of the behavior of a given field (for example, that a field\n * is required in requests, or given as output but ignored as input).\n * This **does not** change the behavior in protocol buffers itself; it only\n * denotes the behavior and may affect how API tooling handles the field.\n *\n * Note: This enum **may** receive new values in the future.\n *\n * @generated from enum google.api.FieldBehavior\n */\nexport enum FieldBehavior {\n /**\n * Conventional default for enums. Do not use this.\n *\n * @generated from enum value: FIELD_BEHAVIOR_UNSPECIFIED = 0;\n */\n FIELD_BEHAVIOR_UNSPECIFIED = 0,\n\n /**\n * Specifically denotes a field as optional.\n * While all fields in protocol buffers are optional, this may be specified\n * for emphasis if appropriate.\n *\n * @generated from enum value: OPTIONAL = 1;\n */\n OPTIONAL = 1,\n\n /**\n * Denotes a field as required.\n * This indicates that the field **must** be provided as part of the request,\n * and failure to do so will cause an error (usually `INVALID_ARGUMENT`).\n *\n * @generated from enum value: REQUIRED = 2;\n */\n REQUIRED = 2,\n\n /**\n * Denotes a field as output only.\n * This indicates that the field is provided in responses, but including the\n * field in a request does nothing (the server *must* ignore it and\n * *must not* throw an error as a result of the field's presence).\n *\n * @generated from enum value: OUTPUT_ONLY = 3;\n */\n OUTPUT_ONLY = 3,\n\n /**\n * Denotes a field as input only.\n * This indicates that the field is provided in requests, and the\n * corresponding field is not included in output.\n *\n * @generated from enum value: INPUT_ONLY = 4;\n */\n INPUT_ONLY = 4,\n\n /**\n * Denotes a field as immutable.\n * This indicates that the field may be set once in a request to create a\n * resource, but may not be changed thereafter.\n *\n * @generated from enum value: IMMUTABLE = 5;\n */\n IMMUTABLE = 5,\n\n /**\n * Denotes that a (repeated) field is an unordered list.\n * This indicates that the service may provide the elements of the list\n * in any arbitrary order, rather than the order the user originally\n * provided. Additionally, the list's order may or may not be stable.\n *\n * @generated from enum value: UNORDERED_LIST = 6;\n */\n UNORDERED_LIST = 6,\n\n /**\n * Denotes that this field returns a non-empty default value if not set.\n * This indicates that if the user provides the empty value in a request,\n * a non-empty value will be returned. The user will not be aware of what\n * non-empty value to expect.\n *\n * @generated from enum value: NON_EMPTY_DEFAULT = 7;\n */\n NON_EMPTY_DEFAULT = 7,\n\n /**\n * Denotes that the field in a resource (a message annotated with\n * google.api.resource) is used in the resource name to uniquely identify the\n * resource. For AIP-compliant APIs, this should only be applied to the\n * `name` field on the resource.\n *\n * This behavior should not be applied to references to other resources within\n * the message.\n *\n * The identifier field of resources often have different field behavior\n * depending on the request it is embedded in (e.g. for Create methods name\n * is optional and unused, while for Update methods it is required). Instead\n * of method-specific annotations, only `IDENTIFIER` is required.\n *\n * @generated from enum value: IDENTIFIER = 8;\n */\n IDENTIFIER = 8,\n}\n\n/**\n * Describes the enum google.api.FieldBehavior.\n */\nexport const FieldBehaviorSchema: GenEnum<FieldBehavior> = /*@__PURE__*/\n enumDesc(file_google_api_field_behavior, 0);\n\n/**\n * A designation of a specific field behavior (required, output only, etc.)\n * in protobuf messages.\n *\n * Examples:\n *\n * string name = 1 [(google.api.field_behavior) = REQUIRED];\n * State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY];\n * google.protobuf.Duration ttl = 1\n * [(google.api.field_behavior) = INPUT_ONLY];\n * google.protobuf.Timestamp expire_time = 1\n * [(google.api.field_behavior) = OUTPUT_ONLY,\n * (google.api.field_behavior) = IMMUTABLE];\n *\n * @generated from extension: repeated google.api.FieldBehavior field_behavior = 1052 [packed = false];\n */\nexport const field_behavior: GenExtension<FieldOptions, FieldBehavior[]> = /*@__PURE__*/\n extDesc(file_google_api_field_behavior, 0);\n\n","// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file thru/common/v1/consensus.proto (package thru.common.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/common/v1/consensus.proto.\n */\nexport const file_thru_common_v1_consensus: GenFile = /*@__PURE__*/\n fileDesc(\"Ch50aHJ1L2NvbW1vbi92MS9jb25zZW5zdXMucHJvdG8SDnRocnUuY29tbW9uLnYxIpYDCg5WZXJzaW9uQ29udGV4dBI2CgdjdXJyZW50GAEgASgLMh4udGhydS5jb21tb24udjEuQ3VycmVudFZlcnNpb25CA+BBAUgAEk4KE2N1cnJlbnRPckhpc3RvcmljYWwYAiABKAsyKi50aHJ1LmNvbW1vbi52MS5DdXJyZW50T3JIaXN0b3JpY2FsVmVyc2lvbkID4EEBSAASEwoEc2xvdBgDIAEoBEID4EEBSAASNAoJdGltZXN0YW1wGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEBSAASEgoDc2VxGAUgASgEQgPgQQFIADqRAbpIjQEaigEKHHZlcnNpb25fY29udGV4dF9oYXNfc2VsZWN0b3ISLm9uZSBvZiBjdXJyZW50LCBzbG90LCBvciB0aW1lc3RhbXAgbXVzdCBiZSBzZXQaOmhhcyh0aGlzLmN1cnJlbnQpIHx8IGhhcyh0aGlzLnNsb3QpIHx8IGhhcyh0aGlzLnRpbWVzdGFtcClCCQoHdmVyc2lvbiIQCg5DdXJyZW50VmVyc2lvbiIcChpDdXJyZW50T3JIaXN0b3JpY2FsVmVyc2lvbirfAQoPQ29uc2Vuc3VzU3RhdHVzEiAKHENPTlNFTlNVU19TVEFUVVNfVU5TUEVDSUZJRUQQABIdChlDT05TRU5TVVNfU1RBVFVTX09CU0VSVkVEEAESHQoZQ09OU0VOU1VTX1NUQVRVU19JTkNMVURFRBACEh4KGkNPTlNFTlNVU19TVEFUVVNfRklOQUxJWkVEEAMSJQohQ09OU0VOU1VTX1NUQVRVU19MT0NBTExZX0VYRUNVVEVEEAQSJQohQ09OU0VOU1VTX1NUQVRVU19DTFVTVEVSX0VYRUNVVEVEEAVCygEKEmNvbS50aHJ1LmNvbW1vbi52MUIOQ29uc2Vuc3VzUHJvdG9QAVpEZ2l0aHViLmNvbS9VbnRvLUxhYnMvdGhydS1uZXQvZ3JwYy9wa2cvcHJvdG8vdGhydS9jb21tb24vdjE7Y29tbW9udjGiAgNUQ1iqAg5UaHJ1LkNvbW1vbi5WMboCA1RIVcoCDlRocnVcQ29tbW9uXFYx4gIaVGhydVxDb21tb25cVjFcR1BCTWV0YWRhdGHqAhBUaHJ1OjpDb21tb246OlYxYgZwcm90bzM\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_timestamp]);\n\n/**\n * VersionContext selects which logical version of a resource should be\n * returned. At least one field must be set.\n *\n * @generated from message thru.common.v1.VersionContext\n */\nexport type VersionContext = Message<\"thru.common.v1.VersionContext\"> & {\n /**\n * Specifies the desired version semantics.\n *\n * @generated from oneof thru.common.v1.VersionContext.version\n */\n version: {\n /**\n * Request the latest version available at request time.\n *\n * @generated from field: thru.common.v1.CurrentVersion current = 1;\n */\n value: CurrentVersion;\n case: \"current\";\n } | {\n /**\n * Request the latest version, or historical on.\n *\n * @generated from field: thru.common.v1.CurrentOrHistoricalVersion currentOrHistorical = 2;\n */\n value: CurrentOrHistoricalVersion;\n case: \"currentOrHistorical\";\n } | {\n /**\n * Request the version for a specific slot number.\n *\n * @generated from field: uint64 slot = 3;\n */\n value: bigint;\n case: \"slot\";\n } | {\n /**\n * Request the version nearest to the provided block timestamp.\n *\n * @generated from field: google.protobuf.Timestamp timestamp = 4;\n */\n value: Timestamp;\n case: \"timestamp\";\n } | {\n /**\n * Request the version for a specific seq number.\n * Relevant only for GetAccount and GetRawAccount requests.\n *\n * @generated from field: uint64 seq = 5;\n */\n value: bigint;\n case: \"seq\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * Describes the message thru.common.v1.VersionContext.\n * Use `create(VersionContextSchema)` to create a new message.\n */\nexport const VersionContextSchema: GenMessage<VersionContext> = /*@__PURE__*/\n messageDesc(file_thru_common_v1_consensus, 0);\n\n/**\n * CurrentVersion is an empty marker message for VersionContext.current.\n *\n * @generated from message thru.common.v1.CurrentVersion\n */\nexport type CurrentVersion = Message<\"thru.common.v1.CurrentVersion\"> & {\n};\n\n/**\n * Describes the message thru.common.v1.CurrentVersion.\n * Use `create(CurrentVersionSchema)` to create a new message.\n */\nexport const CurrentVersionSchema: GenMessage<CurrentVersion> = /*@__PURE__*/\n messageDesc(file_thru_common_v1_consensus, 1);\n\n/**\n * CurrentOrHistoricalVersion is an empty marker message for VersionContext.current.\n *\n * @generated from message thru.common.v1.CurrentOrHistoricalVersion\n */\nexport type CurrentOrHistoricalVersion = Message<\"thru.common.v1.CurrentOrHistoricalVersion\"> & {\n};\n\n/**\n * Describes the message thru.common.v1.CurrentOrHistoricalVersion.\n * Use `create(CurrentOrHistoricalVersionSchema)` to create a new message.\n */\nexport const CurrentOrHistoricalVersionSchema: GenMessage<CurrentOrHistoricalVersion> = /*@__PURE__*/\n messageDesc(file_thru_common_v1_consensus, 2);\n\n/**\n * ConsensusStatus represents the minimum consensus level a resource has\n * achieved when returned by the service.\n *\n * @generated from enum thru.common.v1.ConsensusStatus\n */\nexport enum ConsensusStatus {\n /**\n * CONSENSUS_STATUS_UNSPECIFIED indicates the consensus status is unknown.\n *\n * @generated from enum value: CONSENSUS_STATUS_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * CONSENSUS_STATUS_OBSERVED indicates the resource has been observed but\n * not yet confirmed in a finalized block.\n *\n * @generated from enum value: CONSENSUS_STATUS_OBSERVED = 1;\n */\n OBSERVED = 1,\n\n /**\n * CONSENSUS_STATUS_INCLUDED indicates the resource has been included in the\n * ledger but may not be finalized.\n *\n * @generated from enum value: CONSENSUS_STATUS_INCLUDED = 2;\n */\n INCLUDED = 2,\n\n /**\n * CONSENSUS_STATUS_FINALIZED indicates the resource is finalized for a slot.\n *\n * @generated from enum value: CONSENSUS_STATUS_FINALIZED = 3;\n */\n FINALIZED = 3,\n\n /**\n * CONSENSUS_STATUS_LOCALLY_EXECUTED indicates the local node executed the\n * resource but broader cluster finality may not have been achieved.\n *\n * @generated from enum value: CONSENSUS_STATUS_LOCALLY_EXECUTED = 4;\n */\n LOCALLY_EXECUTED = 4,\n\n /**\n * CONSENSUS_STATUS_CLUSTER_EXECUTED indicates the entire cluster has\n * executed and agreed on the resource.\n *\n * @generated from enum value: CONSENSUS_STATUS_CLUSTER_EXECUTED = 5;\n */\n CLUSTER_EXECUTED = 5,\n}\n\n/**\n * Describes the enum thru.common.v1.ConsensusStatus.\n */\nexport const ConsensusStatusSchema: GenEnum<ConsensusStatus> = /*@__PURE__*/\n enumDesc(file_thru_common_v1_consensus, 0);\n\n","// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file thru/common/v1/errors.proto (package thru.common.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/common/v1/errors.proto.\n */\nexport const file_thru_common_v1_errors: GenFile = /*@__PURE__*/\n fileDesc(\"Cht0aHJ1L2NvbW1vbi92MS9lcnJvcnMucHJvdG8SDnRocnUuY29tbW9uLnYxIq4CCgtFcnJvckRldGFpbBIyCgplcnJvcl90eXBlGAEgASgOMhkudGhydS5jb21tb24udjEuRXJyb3JUeXBlQgPgQQISHAoHbWVzc2FnZRgCIAEoCUIL4EECukgFcgMYgAgSKAoWcmV0ZW50aW9uX3dpbmRvd19zbG90cxgDIAEoBEID4EEBSACIAQESPgoQcmV0ZW50aW9uX2N1dG9mZhgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAUgBiAEBEiQKCmZpZWxkX25hbWUYBSABKAlCC+BBAbpIBXIDGIABSAKIAQFCGQoXX3JldGVudGlvbl93aW5kb3dfc2xvdHNCEwoRX3JldGVudGlvbl9jdXRvZmZCDQoLX2ZpZWxkX25hbWUq7QEKCUVycm9yVHlwZRIaChZFUlJPUl9UWVBFX1VOU1BFQ0lGSUVEEAASGAoURVJST1JfVFlQRV9OT1RfRk9VTkQQARIbChdFUlJPUl9UWVBFX05PVF9SRVRBSU5FRBACEigKJEVSUk9SX1RZUEVfTk9UX0ZPVU5EX09SX05PVF9SRVRBSU5FRBADEh4KGkVSUk9SX1RZUEVfSU5WQUxJRF9SRVFVRVNUEAQSJAogRVJST1JfVFlQRV9DRUxfVkFMSURBVElPTl9GQUlMRUQQBRIdChlFUlJPUl9UWVBFX0lOVEVSTkFMX0VSUk9SEAZCxwEKEmNvbS50aHJ1LmNvbW1vbi52MUILRXJyb3JzUHJvdG9QAVpEZ2l0aHViLmNvbS9VbnRvLUxhYnMvdGhydS1uZXQvZ3JwYy9wa2cvcHJvdG8vdGhydS9jb21tb24vdjE7Y29tbW9udjGiAgNUQ1iqAg5UaHJ1LkNvbW1vbi5WMboCA1RIVcoCDlRocnVcQ29tbW9uXFYx4gIaVGhydVxDb21tb25cVjFcR1BCTWV0YWRhdGHqAhBUaHJ1OjpDb21tb246OlYxYgZwcm90bzM\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_timestamp]);\n\n/**\n * ErrorDetail provides structured error metadata attached to gRPC errors.\n *\n * @generated from message thru.common.v1.ErrorDetail\n */\nexport type ErrorDetail = Message<\"thru.common.v1.ErrorDetail\"> & {\n /**\n * High-level error category.\n *\n * @generated from field: thru.common.v1.ErrorType error_type = 1;\n */\n errorType: ErrorType;\n\n /**\n * Human-readable error summary.\n *\n * @generated from field: string message = 2;\n */\n message: string;\n\n /**\n * Optional retention window expressed in slots when applicable.\n *\n * @generated from field: optional uint64 retention_window_slots = 3;\n */\n retentionWindowSlots?: bigint;\n\n /**\n * Optional retention cutoff timestamp when applicable.\n *\n * @generated from field: optional google.protobuf.Timestamp retention_cutoff = 4;\n */\n retentionCutoff?: Timestamp;\n\n /**\n * Optional name of the field associated with the error.\n *\n * @generated from field: optional string field_name = 5;\n */\n fieldName?: string;\n};\n\n/**\n * Describes the message thru.common.v1.ErrorDetail.\n * Use `create(ErrorDetailSchema)` to create a new message.\n */\nexport const ErrorDetailSchema: GenMessage<ErrorDetail> = /*@__PURE__*/\n messageDesc(file_thru_common_v1_errors, 0);\n\n/**\n * ErrorType captures structured error categories returned by the services.\n *\n * @generated from enum thru.common.v1.ErrorType\n */\nexport enum ErrorType {\n /**\n * ERROR_TYPE_UNSPECIFIED is an unknown error condition.\n *\n * @generated from enum value: ERROR_TYPE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * ERROR_TYPE_NOT_FOUND indicates requested data does not exist.\n *\n * @generated from enum value: ERROR_TYPE_NOT_FOUND = 1;\n */\n NOT_FOUND = 1,\n\n /**\n * ERROR_TYPE_NOT_RETAINED indicates requested data was not retained under TTL.\n *\n * @generated from enum value: ERROR_TYPE_NOT_RETAINED = 2;\n */\n NOT_RETAINED = 2,\n\n /**\n * ERROR_TYPE_NOT_FOUND_OR_NOT_RETAINED indicates an ambiguous not found vs TTL case.\n *\n * @generated from enum value: ERROR_TYPE_NOT_FOUND_OR_NOT_RETAINED = 3;\n */\n NOT_FOUND_OR_NOT_RETAINED = 3,\n\n /**\n * ERROR_TYPE_INVALID_REQUEST indicates the request failed validation.\n *\n * @generated from enum value: ERROR_TYPE_INVALID_REQUEST = 4;\n */\n INVALID_REQUEST = 4,\n\n /**\n * ERROR_TYPE_CEL_VALIDATION_FAILED indicates a CEL filter failed validation.\n *\n * @generated from enum value: ERROR_TYPE_CEL_VALIDATION_FAILED = 5;\n */\n CEL_VALIDATION_FAILED = 5,\n\n /**\n * ERROR_TYPE_INTERNAL_ERROR indicates an internal server error occurred.\n *\n * @generated from enum value: ERROR_TYPE_INTERNAL_ERROR = 6;\n */\n INTERNAL_ERROR = 6,\n}\n\n/**\n * Describes the enum thru.common.v1.ErrorType.\n */\nexport const ErrorTypeSchema: GenEnum<ErrorType> = /*@__PURE__*/\n enumDesc(file_thru_common_v1_errors, 0);\n\n","// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file thru/common/v1/primitives.proto (package thru.common.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/common/v1/primitives.proto.\n */\nexport const file_thru_common_v1_primitives: GenFile = /*@__PURE__*/\n fileDesc(\"Ch90aHJ1L2NvbW1vbi92MS9wcmltaXRpdmVzLnByb3RvEg50aHJ1LmNvbW1vbi52MSIjCgZQdWJrZXkSGQoFdmFsdWUYASABKAxCCuBBArpIBHoCaCAiJgoJU2lnbmF0dXJlEhkKBXZhbHVlGAEgASgMQgrgQQK6SAR6AmhAIiYKCFRhUHVia2V5EhoKBXZhbHVlGAEgASgJQgvgQQK6SAVyA5gBLiIpCgtUc1NpZ25hdHVyZRIaCgV2YWx1ZRgBIAEoCUIL4EECukgFcgOYAVpCywEKEmNvbS50aHJ1LmNvbW1vbi52MUIPUHJpbWl0aXZlc1Byb3RvUAFaRGdpdGh1Yi5jb20vVW50by1MYWJzL3RocnUtbmV0L2dycGMvcGtnL3Byb3RvL3RocnUvY29tbW9uL3YxO2NvbW1vbnYxogIDVENYqgIOVGhydS5Db21tb24uVjG6AgNUSFXKAg5UaHJ1XENvbW1vblxWMeICGlRocnVcQ29tbW9uXFYxXEdQQk1ldGFkYXRh6gIQVGhydTo6Q29tbW9uOjpWMWIGcHJvdG8z\", [file_buf_validate_validate, file_google_api_field_behavior]);\n\n/**\n * Pubkey represents a 32-byte public key value.\n *\n * @generated from message thru.common.v1.Pubkey\n */\nexport type Pubkey = Message<\"thru.common.v1.Pubkey\"> & {\n /**\n * 32-byte public key buffer.\n *\n * @generated from field: bytes value = 1;\n */\n value: Uint8Array;\n};\n\n/**\n * Describes the message thru.common.v1.Pubkey.\n * Use `create(PubkeySchema)` to create a new message.\n */\nexport const PubkeySchema: GenMessage<Pubkey> = /*@__PURE__*/\n messageDesc(file_thru_common_v1_primitives, 0);\n\n/**\n * Signature represents a 64-byte signature value.\n *\n * @generated from message thru.common.v1.Signature\n */\nexport type Signature = Message<\"thru.common.v1.Signature\"> & {\n /**\n * 64-byte signature buffer.\n *\n * @generated from field: bytes value = 1;\n */\n value: Uint8Array;\n};\n\n/**\n * Describes the message thru.common.v1.Signature.\n * Use `create(SignatureSchema)` to create a new message.\n */\nexport const SignatureSchema: GenMessage<Signature> = /*@__PURE__*/\n messageDesc(file_thru_common_v1_primitives, 1);\n\n/**\n * TaPubkey represents a ta-encoded public key string (46 characters).\n *\n * @generated from message thru.common.v1.TaPubkey\n */\nexport type TaPubkey = Message<\"thru.common.v1.TaPubkey\"> & {\n /**\n * 46-character ta-encoded public key string.\n *\n * @generated from field: string value = 1;\n */\n value: string;\n};\n\n/**\n * Describes the message thru.common.v1.TaPubkey.\n * Use `create(TaPubkeySchema)` to create a new message.\n */\nexport const TaPubkeySchema: GenMessage<TaPubkey> = /*@__PURE__*/\n messageDesc(file_thru_common_v1_primitives, 2);\n\n/**\n * TsSignature represents a ts-encoded signature string (90 characters).\n *\n * @generated from message thru.common.v1.TsSignature\n */\nexport type TsSignature = Message<\"thru.common.v1.TsSignature\"> & {\n /**\n * 90-character ts-encoded signature string.\n *\n * @generated from field: string value = 1;\n */\n value: string;\n};\n\n/**\n * Describes the message thru.common.v1.TsSignature.\n * Use `create(TsSignatureSchema)` to create a new message.\n */\nexport const TsSignatureSchema: GenMessage<TsSignature> = /*@__PURE__*/\n messageDesc(file_thru_common_v1_primitives, 3);\n\n","// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file thru/common/v1/filters.proto (package thru.common.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Pubkey, Signature, TaPubkey, TsSignature } from \"./primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"./primitives_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/common/v1/filters.proto.\n */\nexport const file_thru_common_v1_filters: GenFile = /*@__PURE__*/\n fileDesc(\"Chx0aHJ1L2NvbW1vbi92MS9maWx0ZXJzLnByb3RvEg50aHJ1LmNvbW1vbi52MSLHAQoGRmlsdGVyEiQKCmV4cHJlc3Npb24YASABKAlCC+BBAbpIBXIDGIAgSACIAQESNwoGcGFyYW1zGAIgAygLMiIudGhydS5jb21tb24udjEuRmlsdGVyLlBhcmFtc0VudHJ5QgPgQQEaTwoLUGFyYW1zRW50cnkSCwoDa2V5GAEgASgJEi8KBXZhbHVlGAIgASgLMiAudGhydS5jb21tb24udjEuRmlsdGVyUGFyYW1WYWx1ZToCOAFCDQoLX2V4cHJlc3Npb24ipAQKEEZpbHRlclBhcmFtVmFsdWUSGwoMc3RyaW5nX3ZhbHVlGAEgASgJQgPgQQFIABIaCgtieXRlc192YWx1ZRgCIAEoDEID4EEBSAASGQoKYm9vbF92YWx1ZRgDIAEoCEID4EEBSAASGAoJaW50X3ZhbHVlGAQgASgSQgPgQQFIABIZCgp1aW50X3ZhbHVlGAUgASgEQgPgQQFIABIbCgxkb3VibGVfdmFsdWUYBiABKAFCA+BBAUgAEjMKDHB1YmtleV92YWx1ZRgHIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EEBSAASOQoPc2lnbmF0dXJlX3ZhbHVlGAggASgLMhkudGhydS5jb21tb24udjEuU2lnbmF0dXJlQgPgQQFIABI4Cg90YV9wdWJrZXlfdmFsdWUYCSABKAsyGC50aHJ1LmNvbW1vbi52MS5UYVB1YmtleUID4EEBSAASPgoSdHNfc2lnbmF0dXJlX3ZhbHVlGAogASgLMhsudGhydS5jb21tb24udjEuVHNTaWduYXR1cmVCA+BBAUgAEjoKEGJ5dGVzX2xpc3RfdmFsdWUYCyABKAsyGS50aHJ1LmNvbW1vbi52MS5CeXRlc0xpc3RCA+BBAUgAEjwKEXB1YmtleV9saXN0X3ZhbHVlGAwgASgLMhoudGhydS5jb21tb24udjEuUHVia2V5TGlzdEID4EEBSABCBgoEa2luZCIgCglCeXRlc0xpc3QSEwoGdmFsdWVzGAEgAygMQgPgQQEiOQoKUHVia2V5TGlzdBIrCgZ2YWx1ZXMYASADKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBASKhAQoTQ2VsRmlsdGVyVmFsaWRhdGlvbhInChFhbGxvd2VkX2Z1bmN0aW9ucxgBIAMoCUIM4EEBukgGkgEDEIABEiQKDmFsbG93ZWRfZmllbGRzGAIgAygJQgzgQQG6SAaSAQMQgAISKAoObWF4X2NvbXBsZXhpdHkYAyABKA1CC+BBAbpIBSoDGOgHSACIAQFCEQoPX21heF9jb21wbGV4aXR5QsgBChJjb20udGhydS5jb21tb24udjFCDEZpbHRlcnNQcm90b1ABWkRnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L2NvbW1vbi92MTtjb21tb252MaICA1RDWKoCDlRocnUuQ29tbW9uLlYxugIDVEhVygIOVGhydVxDb21tb25cVjHiAhpUaHJ1XENvbW1vblxWMVxHUEJNZXRhZGF0YeoCEFRocnU6OkNvbW1vbjo6VjFiBnByb3RvMw\", [file_buf_validate_validate, file_google_api_field_behavior, file_thru_common_v1_primitives]);\n\n/**\n * Filter represents a CEL-based expression applied to query or stream results.\n *\n * @generated from message thru.common.v1.Filter\n */\nexport type Filter = Message<\"thru.common.v1.Filter\"> & {\n /**\n * CEL expression applied server-side. Empty expressions are treated as no-op.\n *\n * @generated from field: optional string expression = 1;\n */\n expression?: string;\n\n /**\n * Named parameter bindings for expression parameterization.\n *\n * @generated from field: map<string, thru.common.v1.FilterParamValue> params = 2;\n */\n params: { [key: string]: FilterParamValue };\n};\n\n/**\n * Describes the message thru.common.v1.Filter.\n * Use `create(FilterSchema)` to create a new message.\n */\nexport const FilterSchema: GenMessage<Filter> = /*@__PURE__*/\n messageDesc(file_thru_common_v1_filters, 0);\n\n/**\n * FilterParamValue carries strongly-typed CEL parameter bindings.\n *\n * @generated from message thru.common.v1.FilterParamValue\n */\nexport type FilterParamValue = Message<\"thru.common.v1.FilterParamValue\"> & {\n /**\n * @generated from oneof thru.common.v1.FilterParamValue.kind\n */\n kind: {\n /**\n * @generated from field: string string_value = 1;\n */\n value: string;\n case: \"stringValue\";\n } | {\n /**\n * @generated from field: bytes bytes_value = 2;\n */\n value: Uint8Array;\n case: \"bytesValue\";\n } | {\n /**\n * @generated from field: bool bool_value = 3;\n */\n value: boolean;\n case: \"boolValue\";\n } | {\n /**\n * @generated from field: sint64 int_value = 4;\n */\n value: bigint;\n case: \"intValue\";\n } | {\n /**\n * @generated from field: uint64 uint_value = 5;\n */\n value: bigint;\n case: \"uintValue\";\n } | {\n /**\n * @generated from field: double double_value = 6;\n */\n value: number;\n case: \"doubleValue\";\n } | {\n /**\n * @generated from field: thru.common.v1.Pubkey pubkey_value = 7;\n */\n value: Pubkey;\n case: \"pubkeyValue\";\n } | {\n /**\n * @generated from field: thru.common.v1.Signature signature_value = 8;\n */\n value: Signature;\n case: \"signatureValue\";\n } | {\n /**\n * @generated from field: thru.common.v1.TaPubkey ta_pubkey_value = 9;\n */\n value: TaPubkey;\n case: \"taPubkeyValue\";\n } | {\n /**\n * @generated from field: thru.common.v1.TsSignature ts_signature_value = 10;\n */\n value: TsSignature;\n case: \"tsSignatureValue\";\n } | {\n /**\n * @generated from field: thru.common.v1.BytesList bytes_list_value = 11;\n */\n value: BytesList;\n case: \"bytesListValue\";\n } | {\n /**\n * @generated from field: thru.common.v1.PubkeyList pubkey_list_value = 12;\n */\n value: PubkeyList;\n case: \"pubkeyListValue\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * Describes the message thru.common.v1.FilterParamValue.\n * Use `create(FilterParamValueSchema)` to create a new message.\n */\nexport const FilterParamValueSchema: GenMessage<FilterParamValue> = /*@__PURE__*/\n messageDesc(file_thru_common_v1_filters, 1);\n\n/**\n * BytesList holds a list of byte arrays for multi-value CEL filtering.\n *\n * @generated from message thru.common.v1.BytesList\n */\nexport type BytesList = Message<\"thru.common.v1.BytesList\"> & {\n /**\n * @generated from field: repeated bytes values = 1;\n */\n values: Uint8Array[];\n};\n\n/**\n * Describes the message thru.common.v1.BytesList.\n * Use `create(BytesListSchema)` to create a new message.\n */\nexport const BytesListSchema: GenMessage<BytesList> = /*@__PURE__*/\n messageDesc(file_thru_common_v1_filters, 2);\n\n/**\n * PubkeyList holds a list of pubkeys for multi-value CEL filtering.\n *\n * @generated from message thru.common.v1.PubkeyList\n */\nexport type PubkeyList = Message<\"thru.common.v1.PubkeyList\"> & {\n /**\n * @generated from field: repeated thru.common.v1.Pubkey values = 1;\n */\n values: Pubkey[];\n};\n\n/**\n * Describes the message thru.common.v1.PubkeyList.\n * Use `create(PubkeyListSchema)` to create a new message.\n */\nexport const PubkeyListSchema: GenMessage<PubkeyList> = /*@__PURE__*/\n messageDesc(file_thru_common_v1_filters, 3);\n\n/**\n * CelFilterValidation describes the validation configuration returned to\n * clients to help them build safe filter expressions.\n *\n * @generated from message thru.common.v1.CelFilterValidation\n */\nexport type CelFilterValidation = Message<\"thru.common.v1.CelFilterValidation\"> & {\n /**\n * List of allowed CEL function names for a specific request type.\n *\n * @generated from field: repeated string allowed_functions = 1;\n */\n allowedFunctions: string[];\n\n /**\n * List of allowed field names accessible to the CEL expression.\n *\n * @generated from field: repeated string allowed_fields = 2;\n */\n allowedFields: string[];\n\n /**\n * Maximum AST node count permitted for a CEL expression.\n *\n * @generated from field: optional uint32 max_complexity = 3;\n */\n maxComplexity?: number;\n};\n\n/**\n * Describes the message thru.common.v1.CelFilterValidation.\n * Use `create(CelFilterValidationSchema)` to create a new message.\n */\nexport const CelFilterValidationSchema: GenMessage<CelFilterValidation> = /*@__PURE__*/\n messageDesc(file_thru_common_v1_filters, 4);\n\n","// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file thru/common/v1/pagination.proto (package thru.common.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/common/v1/pagination.proto.\n */\nexport const file_thru_common_v1_pagination: GenFile = /*@__PURE__*/\n fileDesc(\"Ch90aHJ1L2NvbW1vbi92MS9wYWdpbmF0aW9uLnByb3RvEg50aHJ1LmNvbW1vbi52MSKoAQoLUGFnZVJlcXVlc3QSJQoJcGFnZV9zaXplGAEgASgNQg3gQQG6SAcqBRjoBygBSACIAQESJAoKcGFnZV90b2tlbhgCIAEoCUIL4EEBukgFcgMYgARIAYgBARIiCghvcmRlcl9ieRgDIAEoCUIL4EEBukgFcgMYgAJIAogBAUIMCgpfcGFnZV9zaXplQg0KC19wYWdlX3Rva2VuQgsKCV9vcmRlcl9ieSJyCgxQYWdlUmVzcG9uc2USIQoPbmV4dF9wYWdlX3Rva2VuGAEgASgJQgPgQQFIAIgBARIcCgp0b3RhbF9zaXplGAIgASgEQgPgQQFIAYgBAUISChBfbmV4dF9wYWdlX3Rva2VuQg0KC190b3RhbF9zaXplQssBChJjb20udGhydS5jb21tb24udjFCD1BhZ2luYXRpb25Qcm90b1ABWkRnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L2NvbW1vbi92MTtjb21tb252MaICA1RDWKoCDlRocnUuQ29tbW9uLlYxugIDVEhVygIOVGhydVxDb21tb25cVjHiAhpUaHJ1XENvbW1vblxWMVxHUEJNZXRhZGF0YeoCEFRocnU6OkNvbW1vbjo6VjFiBnByb3RvMw\", [file_buf_validate_validate, file_google_api_field_behavior]);\n\n/**\n * PageRequest contains pagination parameters for listing RPCs.\n *\n * @generated from message thru.common.v1.PageRequest\n */\nexport type PageRequest = Message<\"thru.common.v1.PageRequest\"> & {\n /**\n * Maximum number of items to return in a single response.\n *\n * @generated from field: optional uint32 page_size = 1;\n */\n pageSize?: number;\n\n /**\n * Token identifying the position to resume from.\n *\n * @generated from field: optional string page_token = 2;\n */\n pageToken?: string;\n\n /**\n * Optional ordering specification in \"field [asc|desc]\" form.\n *\n * @generated from field: optional string order_by = 3;\n */\n orderBy?: string;\n};\n\n/**\n * Describes the message thru.common.v1.PageRequest.\n * Use `create(PageRequestSchema)` to create a new message.\n */\nexport const PageRequestSchema: GenMessage<PageRequest> = /*@__PURE__*/\n messageDesc(file_thru_common_v1_pagination, 0);\n\n/**\n * PageResponse captures pagination metadata returned with list results.\n *\n * @generated from message thru.common.v1.PageResponse\n */\nexport type PageResponse = Message<\"thru.common.v1.PageResponse\"> & {\n /**\n * Token to retrieve the next page of results, if any.\n *\n * @generated from field: optional string next_page_token = 1;\n */\n nextPageToken?: string;\n\n /**\n * Total number of items available when known.\n *\n * @generated from field: optional uint64 total_size = 2;\n */\n totalSize?: bigint;\n};\n\n/**\n * Describes the message thru.common.v1.PageResponse.\n * Use `create(PageResponseSchema)` to create a new message.\n */\nexport const PageResponseSchema: GenMessage<PageResponse> = /*@__PURE__*/\n messageDesc(file_thru_common_v1_pagination, 1);\n\n","// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file thru/core/v1/types.proto (package thru.core.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/core/v1/types.proto.\n */\nexport const file_thru_core_v1_types: GenFile = /*@__PURE__*/\n fileDesc(\"Chh0aHJ1L2NvcmUvdjEvdHlwZXMucHJvdG8SDHRocnUuY29yZS52MSIhCgRIYXNoEhkKBXZhbHVlGAEgASgMQgrgQQK6SAR6AmggIiYKCUJsb2NrSGFzaBIZCgV2YWx1ZRgBIAEoDEIK4EECukgEegJoIEK5AQoQY29tLnRocnUuY29yZS52MUIKVHlwZXNQcm90b1ABWkBnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L2NvcmUvdjE7Y29yZXYxogIDVENYqgIMVGhydS5Db3JlLlYxugIEVEhVQ8oCDFRocnVcQ29yZVxWMeICGFRocnVcQ29yZVxWMVxHUEJNZXRhZGF0YeoCDlRocnU6OkNvcmU6OlYxYgZwcm90bzM\", [file_buf_validate_validate, file_google_api_field_behavior, file_thru_common_v1_primitives]);\n\n/**\n * Hash represents a 32-byte hash value.\n *\n * @generated from message thru.core.v1.Hash\n */\nexport type Hash = Message<\"thru.core.v1.Hash\"> & {\n /**\n * 32-byte hash buffer.\n *\n * @generated from field: bytes value = 1;\n */\n value: Uint8Array;\n};\n\n/**\n * Describes the message thru.core.v1.Hash.\n * Use `create(HashSchema)` to create a new message.\n */\nexport const HashSchema: GenMessage<Hash> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_types, 0);\n\n/**\n * BlockHash represents a 32-byte hash for block identifiers.\n *\n * @generated from message thru.core.v1.BlockHash\n */\nexport type BlockHash = Message<\"thru.core.v1.BlockHash\"> & {\n /**\n * 32-byte block hash buffer.\n *\n * @generated from field: bytes value = 1;\n */\n value: Uint8Array;\n};\n\n/**\n * Describes the message thru.core.v1.BlockHash.\n * Use `create(BlockHashSchema)` to create a new message.\n */\nexport const BlockHashSchema: GenMessage<BlockHash> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_types, 1);\n\n","// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file thru/core/v1/account.proto (package thru.core.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { ConsensusStatus } from \"../../common/v1/consensus_pb\";\nimport { file_thru_common_v1_consensus } from \"../../common/v1/consensus_pb\";\nimport type { Pubkey } from \"../../common/v1/primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport { file_thru_core_v1_types } from \"./types_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/core/v1/account.proto.\n */\nexport const file_thru_core_v1_account: GenFile = /*@__PURE__*/\n fileDesc(\"Chp0aHJ1L2NvcmUvdjEvYWNjb3VudC5wcm90bxIMdGhydS5jb3JlLnYxIsgBCgxBY2NvdW50RmxhZ3MSFwoKaXNfcHJvZ3JhbRgBIAEoCEID4EECEhoKDWlzX3ByaXZpbGVnZWQYAiABKAhCA+BBAhIeChFpc191bmNvbXByZXNzYWJsZRgDIAEoCEID4EECEhkKDGlzX2VwaGVtZXJhbBgEIAEoCEID4EECEhcKCmlzX2RlbGV0ZWQYBSABKAhCA+BBAhITCgZpc19uZXcYBiABKAhCA+BBAhIaCg1pc19jb21wcmVzc2VkGAcgASgIQgPgQQIilQIKC0FjY291bnRNZXRhEhsKB3ZlcnNpb24YASABKA1CCuBBArpIBCoCKAESLgoFZmxhZ3MYAiABKAsyGi50aHJ1LmNvcmUudjEuQWNjb3VudEZsYWdzQgPgQQISFgoJZGF0YV9zaXplGAMgASgNQgPgQQISEAoDc2VxGAQgASgEQgPgQQISKgoFb3duZXIYBSABKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBAhIUCgdiYWxhbmNlGAYgASgEQgPgQQISEgoFbm9uY2UYByABKARCA+BBAhIjChFsYXN0X3VwZGF0ZWRfc2xvdBgIIAEoBEID4EEBSACIAQFCFAoSX2xhc3RfdXBkYXRlZF9zbG90Iq8BCgtBY2NvdW50RGF0YRIgCgRkYXRhGAEgASgMQg3gQQG6SAd6BRiAgIAISACIAQESHAoKY29tcHJlc3NlZBgCIAEoCEID4EEBSAGIAQESLgoVY29tcHJlc3Npb25fYWxnb3JpdGhtGAMgASgJQgrgQQG6SARyAhhASAKIAQFCBwoFX2RhdGFCDQoLX2NvbXByZXNzZWRCGAoWX2NvbXByZXNzaW9uX2FsZ29yaXRobSJJCglEYXRhU2xpY2USHQoGb2Zmc2V0GAEgASgNQg3gQQK6SAcyBRiAgIAIEh0KBmxlbmd0aBgCIAEoDUIN4EECukgHMgUYgICACCLbAQoLQWNjb3VudFBhZ2USFQoIcGFnZV9pZHgYASABKA1CA+BBAhIeCglwYWdlX3NpemUYAiABKA1CC+BBArpIBSoDGIAgEh4KCXBhZ2VfZGF0YRgDIAEoDEIL4EECukgFegMYgCASHAoKY29tcHJlc3NlZBgEIAEoCEID4EEBSACIAQESLgoVY29tcHJlc3Npb25fYWxnb3JpdGhtGAUgASgJQgrgQQG6SARyAhhASAGIAQFCDQoLX2NvbXByZXNzZWRCGAoWX2NvbXByZXNzaW9uX2FsZ29yaXRobSKMAQoWVmVyc2lvbkNvbnRleHRNZXRhZGF0YRIWCgRzbG90GAEgASgEQgPgQQFIAIgBARI9Cg9ibG9ja190aW1lc3RhbXAYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQFIAYgBAUIHCgVfc2xvdEISChBfYmxvY2tfdGltZXN0YW1wIuYCCgdBY2NvdW50EiwKB2FkZHJlc3MYASABKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBAhIxCgRtZXRhGAIgASgLMhkudGhydS5jb3JlLnYxLkFjY291bnRNZXRhQgPgQQFIAIgBARIxCgRkYXRhGAMgASgLMhkudGhydS5jb3JlLnYxLkFjY291bnREYXRhQgPgQQFIAYgBARJHCg92ZXJzaW9uX2NvbnRleHQYBCABKAsyJC50aHJ1LmNvcmUudjEuVmVyc2lvbkNvbnRleHRNZXRhZGF0YUID4EEBSAKIAQESQwoQY29uc2Vuc3VzX3N0YXR1cxgFIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSAOIAQFCBwoFX21ldGFCBwoFX2RhdGFCEgoQX3ZlcnNpb25fY29udGV4dEITChFfY29uc2Vuc3VzX3N0YXR1cyLpAQoKUmF3QWNjb3VudBIsCgdhZGRyZXNzGAEgASgLMhYudGhydS5jb21tb24udjEuUHVia2V5QgPgQQISHQoIcmF3X21ldGEYAiABKAxCC+BBArpIBXoDGIAgEiQKCHJhd19kYXRhGAMgASgMQg3gQQG6SAd6BRiAgIAISACIAQESRwoPdmVyc2lvbl9jb250ZXh0GAQgASgLMiQudGhydS5jb3JlLnYxLlZlcnNpb25Db250ZXh0TWV0YWRhdGFCA+BBAUgBiAEBQgsKCV9yYXdfZGF0YUISChBfdmVyc2lvbl9jb250ZXh0KpgBCgtBY2NvdW50VmlldxIcChhBQ0NPVU5UX1ZJRVdfVU5TUEVDSUZJRUQQABIcChhBQ0NPVU5UX1ZJRVdfUFVCS0VZX09OTFkQARIaChZBQ0NPVU5UX1ZJRVdfTUVUQV9PTkxZEAISGgoWQUNDT1VOVF9WSUVXX0RBVEFfT05MWRADEhUKEUFDQ09VTlRfVklFV19GVUxMEARCuwEKEGNvbS50aHJ1LmNvcmUudjFCDEFjY291bnRQcm90b1ABWkBnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L2NvcmUvdjE7Y29yZXYxogIDVENYqgIMVGhydS5Db3JlLlYxugIEVEhVQ8oCDFRocnVcQ29yZVxWMeICGFRocnVcQ29yZVxWMVxHUEJNZXRhZGF0YeoCDlRocnU6OkNvcmU6OlYxYgZwcm90bzM\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_timestamp, file_thru_common_v1_consensus, file_thru_common_v1_primitives, file_thru_core_v1_types]);\n\n/**\n * AccountFlags enumerates boolean account capability flags.\n *\n * @generated from message thru.core.v1.AccountFlags\n */\nexport type AccountFlags = Message<\"thru.core.v1.AccountFlags\"> & {\n /**\n * @generated from field: bool is_program = 1;\n */\n isProgram: boolean;\n\n /**\n * @generated from field: bool is_privileged = 2;\n */\n isPrivileged: boolean;\n\n /**\n * @generated from field: bool is_uncompressable = 3;\n */\n isUncompressable: boolean;\n\n /**\n * @generated from field: bool is_ephemeral = 4;\n */\n isEphemeral: boolean;\n\n /**\n * @generated from field: bool is_deleted = 5;\n */\n isDeleted: boolean;\n\n /**\n * @generated from field: bool is_new = 6;\n */\n isNew: boolean;\n\n /**\n * @generated from field: bool is_compressed = 7;\n */\n isCompressed: boolean;\n};\n\n/**\n * Describes the message thru.core.v1.AccountFlags.\n * Use `create(AccountFlagsSchema)` to create a new message.\n */\nexport const AccountFlagsSchema: GenMessage<AccountFlags> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_account, 0);\n\n/**\n * AccountMeta captures metadata associated with an account.\n *\n * @generated from message thru.core.v1.AccountMeta\n */\nexport type AccountMeta = Message<\"thru.core.v1.AccountMeta\"> & {\n /**\n * @generated from field: uint32 version = 1;\n */\n version: number;\n\n /**\n * @generated from field: thru.core.v1.AccountFlags flags = 2;\n */\n flags?: AccountFlags;\n\n /**\n * @generated from field: uint32 data_size = 3;\n */\n dataSize: number;\n\n /**\n * Account sequence number\n *\n * @generated from field: uint64 seq = 4;\n */\n seq: bigint;\n\n /**\n * @generated from field: thru.common.v1.Pubkey owner = 5;\n */\n owner?: Pubkey;\n\n /**\n * @generated from field: uint64 balance = 6;\n */\n balance: bigint;\n\n /**\n * @generated from field: uint64 nonce = 7;\n */\n nonce: bigint;\n\n /**\n * The slot in which this account was last updated.\n *\n * @generated from field: optional uint64 last_updated_slot = 8;\n */\n lastUpdatedSlot?: bigint;\n};\n\n/**\n * Describes the message thru.core.v1.AccountMeta.\n * Use `create(AccountMetaSchema)` to create a new message.\n */\nexport const AccountMetaSchema: GenMessage<AccountMeta> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_account, 1);\n\n/**\n * AccountData contains account data payloads.\n *\n * @generated from message thru.core.v1.AccountData\n */\nexport type AccountData = Message<\"thru.core.v1.AccountData\"> & {\n /**\n * @generated from field: optional bytes data = 1;\n */\n data?: Uint8Array;\n\n /**\n * @generated from field: optional bool compressed = 2;\n */\n compressed?: boolean;\n\n /**\n * @generated from field: optional string compression_algorithm = 3;\n */\n compressionAlgorithm?: string;\n};\n\n/**\n * Describes the message thru.core.v1.AccountData.\n * Use `create(AccountDataSchema)` to create a new message.\n */\nexport const AccountDataSchema: GenMessage<AccountData> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_account, 2);\n\n/**\n * DataSlice describes a contiguous range of account data to return.\n *\n * @generated from message thru.core.v1.DataSlice\n */\nexport type DataSlice = Message<\"thru.core.v1.DataSlice\"> & {\n /**\n * @generated from field: uint32 offset = 1;\n */\n offset: number;\n\n /**\n * @generated from field: uint32 length = 2;\n */\n length: number;\n};\n\n/**\n * Describes the message thru.core.v1.DataSlice.\n * Use `create(DataSliceSchema)` to create a new message.\n */\nexport const DataSliceSchema: GenMessage<DataSlice> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_account, 3);\n\n/**\n * AccountPage represents a 4KB chunk for streaming account data.\n *\n * @generated from message thru.core.v1.AccountPage\n */\nexport type AccountPage = Message<\"thru.core.v1.AccountPage\"> & {\n /**\n * @generated from field: uint32 page_idx = 1;\n */\n pageIdx: number;\n\n /**\n * @generated from field: uint32 page_size = 2;\n */\n pageSize: number;\n\n /**\n * @generated from field: bytes page_data = 3;\n */\n pageData: Uint8Array;\n\n /**\n * @generated from field: optional bool compressed = 4;\n */\n compressed?: boolean;\n\n /**\n * @generated from field: optional string compression_algorithm = 5;\n */\n compressionAlgorithm?: string;\n};\n\n/**\n * Describes the message thru.core.v1.AccountPage.\n * Use `create(AccountPageSchema)` to create a new message.\n */\nexport const AccountPageSchema: GenMessage<AccountPage> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_account, 4);\n\n/**\n * VersionContextMetadata captures context for a returned account state.\n *\n * @generated from message thru.core.v1.VersionContextMetadata\n */\nexport type VersionContextMetadata = Message<\"thru.core.v1.VersionContextMetadata\"> & {\n /**\n * @generated from field: optional uint64 slot = 1;\n */\n slot?: bigint;\n\n /**\n * @generated from field: optional google.protobuf.Timestamp block_timestamp = 2;\n */\n blockTimestamp?: Timestamp;\n};\n\n/**\n * Describes the message thru.core.v1.VersionContextMetadata.\n * Use `create(VersionContextMetadataSchema)` to create a new message.\n */\nexport const VersionContextMetadataSchema: GenMessage<VersionContextMetadata> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_account, 5);\n\n/**\n * Account models a fully decoded account resource.\n *\n * @generated from message thru.core.v1.Account\n */\nexport type Account = Message<\"thru.core.v1.Account\"> & {\n /**\n * @generated from field: thru.common.v1.Pubkey address = 1;\n */\n address?: Pubkey;\n\n /**\n * @generated from field: optional thru.core.v1.AccountMeta meta = 2;\n */\n meta?: AccountMeta;\n\n /**\n * @generated from field: optional thru.core.v1.AccountData data = 3;\n */\n data?: AccountData;\n\n /**\n * @generated from field: optional thru.core.v1.VersionContextMetadata version_context = 4;\n */\n versionContext?: VersionContextMetadata;\n\n /**\n * @generated from field: optional thru.common.v1.ConsensusStatus consensus_status = 5;\n */\n consensusStatus?: ConsensusStatus;\n};\n\n/**\n * Describes the message thru.core.v1.Account.\n * Use `create(AccountSchema)` to create a new message.\n */\nexport const AccountSchema: GenMessage<Account> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_account, 6);\n\n/**\n * RawAccount captures raw serialized account bytes.\n *\n * @generated from message thru.core.v1.RawAccount\n */\nexport type RawAccount = Message<\"thru.core.v1.RawAccount\"> & {\n /**\n * @generated from field: thru.common.v1.Pubkey address = 1;\n */\n address?: Pubkey;\n\n /**\n * @generated from field: bytes raw_meta = 2;\n */\n rawMeta: Uint8Array;\n\n /**\n * @generated from field: optional bytes raw_data = 3;\n */\n rawData?: Uint8Array;\n\n /**\n * @generated from field: optional thru.core.v1.VersionContextMetadata version_context = 4;\n */\n versionContext?: VersionContextMetadata;\n};\n\n/**\n * Describes the message thru.core.v1.RawAccount.\n * Use `create(RawAccountSchema)` to create a new message.\n */\nexport const RawAccountSchema: GenMessage<RawAccount> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_account, 7);\n\n/**\n * AccountView controls which sections of account resources are returned.\n *\n * @generated from enum thru.core.v1.AccountView\n */\nexport enum AccountView {\n /**\n * ACCOUNT_VIEW_UNSPECIFIED uses service defaults.\n *\n * @generated from enum value: ACCOUNT_VIEW_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * ACCOUNT_VIEW_PUBKEY_ONLY returns only the account address.\n *\n * @generated from enum value: ACCOUNT_VIEW_PUBKEY_ONLY = 1;\n */\n PUBKEY_ONLY = 1,\n\n /**\n * ACCOUNT_VIEW_META_ONLY returns only account metadata.\n *\n * @generated from enum value: ACCOUNT_VIEW_META_ONLY = 2;\n */\n META_ONLY = 2,\n\n /**\n * ACCOUNT_VIEW_DATA_ONLY returns only account data.\n *\n * @generated from enum value: ACCOUNT_VIEW_DATA_ONLY = 3;\n */\n DATA_ONLY = 3,\n\n /**\n * ACCOUNT_VIEW_FULL returns address, metadata, and data.\n *\n * @generated from enum value: ACCOUNT_VIEW_FULL = 4;\n */\n FULL = 4,\n}\n\n/**\n * Describes the enum thru.core.v1.AccountView.\n */\nexport const AccountViewSchema: GenEnum<AccountView> = /*@__PURE__*/\n enumDesc(file_thru_core_v1_account, 0);\n\n","// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file thru/core/v1/block.proto (package thru.core.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Pubkey, Signature } from \"../../common/v1/primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport type { ConsensusStatus } from \"../../common/v1/consensus_pb\";\nimport { file_thru_common_v1_consensus } from \"../../common/v1/consensus_pb\";\nimport type { BlockHash } from \"./types_pb\";\nimport { file_thru_core_v1_types } from \"./types_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/core/v1/block.proto.\n */\nexport const file_thru_core_v1_block: GenFile = /*@__PURE__*/\n fileDesc(\"Chh0aHJ1L2NvcmUvdjEvYmxvY2sucHJvdG8SDHRocnUuY29yZS52MSKMBAoLQmxvY2tIZWFkZXISEQoEc2xvdBgBIAEoBEID4EECEjAKCmJsb2NrX2hhc2gYAiABKAsyFy50aHJ1LmNvcmUudjEuQmxvY2tIYXNoQgPgQQISOAoQaGVhZGVyX3NpZ25hdHVyZRgDIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEhQKB3ZlcnNpb24YBCABKA1CA+BBAhItCghwcm9kdWNlchgFIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjkKEGV4cGlyeV90aW1lc3RhbXAYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQISFwoKc3RhcnRfc2xvdBgHIAEoBEID4EECEhkKDGV4cGlyeV9hZnRlchgIIAEoDUID4EECEhsKDm1heF9ibG9ja19zaXplGAkgASgNQgPgQQISHgoRbWF4X2NvbXB1dGVfdW5pdHMYCiABKARCA+BBAhIcCg9tYXhfc3RhdGVfdW5pdHMYCyABKA1CA+BBAhIgChNib25kX2Ftb3VudF9sb2NrX3VwGAwgASgEQgPgQQISMwoKYmxvY2tfdGltZRgNIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAhIYCgt3ZWlnaHRfc2xvdBgOIAEoBEID4EECItsBCgtCbG9ja0Zvb3RlchIxCglzaWduYXR1cmUYASABKAsyGS50aHJ1LmNvbW1vbi52MS5TaWduYXR1cmVCA+BBAhIyCgZzdGF0dXMYAiABKA4yHS50aHJ1LmNvcmUudjEuRXhlY3V0aW9uU3RhdHVzQgPgQQISIwoWY29uc3VtZWRfY29tcHV0ZV91bml0cxgDIAEoBEID4EECEiEKFGNvbnN1bWVkX3N0YXRlX3VuaXRzGAQgASgNQgPgQQISHQoQYXR0ZXN0b3JfcGF5bWVudBgFIAEoBEID4EECIvwBCgVCbG9jaxIuCgZoZWFkZXIYASABKAsyGS50aHJ1LmNvcmUudjEuQmxvY2tIZWFkZXJCA+BBAhIzCgZmb290ZXIYAiABKAsyGS50aHJ1LmNvcmUudjEuQmxvY2tGb290ZXJCA+BBAUgAiAEBEiAKBGJvZHkYAyABKAxCDeBBAbpIB3oFGICAgBBIAYgBARJDChBjb25zZW5zdXNfc3RhdHVzGAQgASgOMh8udGhydS5jb21tb24udjEuQ29uc2Vuc3VzU3RhdHVzQgPgQQFIAogBAUIJCgdfZm9vdGVyQgcKBV9ib2R5QhMKEV9jb25zZW5zdXNfc3RhdHVzIj8KCFJhd0Jsb2NrEhEKBHNsb3QYASABKARCA+BBAhIgCglyYXdfYmxvY2sYAiABKAxCDeBBArpIB3oFGICAgBAqlAEKCUJsb2NrVmlldxIaChZCTE9DS19WSUVXX1VOU1BFQ0lGSUVEEAASGgoWQkxPQ0tfVklFV19IRUFERVJfT05MWRABEiAKHEJMT0NLX1ZJRVdfSEVBREVSX0FORF9GT09URVIQAhIYChRCTE9DS19WSUVXX0JPRFlfT05MWRADEhMKD0JMT0NLX1ZJRVdfRlVMTBAEKo0BCg9FeGVjdXRpb25TdGF0dXMSIAocRVhFQ1VUSU9OX1NUQVRVU19VTlNQRUNJRklFRBAAEhwKGEVYRUNVVElPTl9TVEFUVVNfUEVORElORxABEh0KGUVYRUNVVElPTl9TVEFUVVNfRVhFQ1VURUQQAhIbChdFWEVDVVRJT05fU1RBVFVTX0ZBSUxFRBADQrkBChBjb20udGhydS5jb3JlLnYxQgpCbG9ja1Byb3RvUAFaQGdpdGh1Yi5jb20vVW50by1MYWJzL3RocnUtbmV0L2dycGMvcGtnL3Byb3RvL3RocnUvY29yZS92MTtjb3JldjGiAgNUQ1iqAgxUaHJ1LkNvcmUuVjG6AgRUSFVDygIMVGhydVxDb3JlXFYx4gIYVGhydVxDb3JlXFYxXEdQQk1ldGFkYXRh6gIOVGhydTo6Q29yZTo6VjFiBnByb3RvMw\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_timestamp, file_thru_common_v1_primitives, file_thru_common_v1_consensus, file_thru_core_v1_types]);\n\n/**\n * BlockHeader describes metadata about a block.\n *\n * @generated from message thru.core.v1.BlockHeader\n */\nexport type BlockHeader = Message<\"thru.core.v1.BlockHeader\"> & {\n /**\n * @generated from field: uint64 slot = 1;\n */\n slot: bigint;\n\n /**\n * @generated from field: thru.core.v1.BlockHash block_hash = 2;\n */\n blockHash?: BlockHash;\n\n /**\n * @generated from field: thru.common.v1.Signature header_signature = 3;\n */\n headerSignature?: Signature;\n\n /**\n * @generated from field: uint32 version = 4;\n */\n version: number;\n\n /**\n * @generated from field: thru.common.v1.Pubkey producer = 5;\n */\n producer?: Pubkey;\n\n /**\n * @generated from field: google.protobuf.Timestamp expiry_timestamp = 6;\n */\n expiryTimestamp?: Timestamp;\n\n /**\n * @generated from field: uint64 start_slot = 7;\n */\n startSlot: bigint;\n\n /**\n * @generated from field: uint32 expiry_after = 8;\n */\n expiryAfter: number;\n\n /**\n * @generated from field: uint32 max_block_size = 9;\n */\n maxBlockSize: number;\n\n /**\n * @generated from field: uint64 max_compute_units = 10;\n */\n maxComputeUnits: bigint;\n\n /**\n * @generated from field: uint32 max_state_units = 11;\n */\n maxStateUnits: number;\n\n /**\n * @generated from field: uint64 bond_amount_lock_up = 12;\n */\n bondAmountLockUp: bigint;\n\n /**\n * @generated from field: google.protobuf.Timestamp block_time = 13;\n */\n blockTime?: Timestamp;\n\n /**\n * @generated from field: uint64 weight_slot = 14;\n */\n weightSlot: bigint;\n};\n\n/**\n * Describes the message thru.core.v1.BlockHeader.\n * Use `create(BlockHeaderSchema)` to create a new message.\n */\nexport const BlockHeaderSchema: GenMessage<BlockHeader> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_block, 0);\n\n/**\n * BlockFooter captures execution result metadata for a block.\n *\n * @generated from message thru.core.v1.BlockFooter\n */\nexport type BlockFooter = Message<\"thru.core.v1.BlockFooter\"> & {\n /**\n * @generated from field: thru.common.v1.Signature signature = 1;\n */\n signature?: Signature;\n\n /**\n * @generated from field: thru.core.v1.ExecutionStatus status = 2;\n */\n status: ExecutionStatus;\n\n /**\n * @generated from field: uint64 consumed_compute_units = 3;\n */\n consumedComputeUnits: bigint;\n\n /**\n * @generated from field: uint32 consumed_state_units = 4;\n */\n consumedStateUnits: number;\n\n /**\n * @generated from field: uint64 attestor_payment = 5;\n */\n attestorPayment: bigint;\n};\n\n/**\n * Describes the message thru.core.v1.BlockFooter.\n * Use `create(BlockFooterSchema)` to create a new message.\n */\nexport const BlockFooterSchema: GenMessage<BlockFooter> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_block, 1);\n\n/**\n * Block represents a fully decoded block resource.\n *\n * @generated from message thru.core.v1.Block\n */\nexport type Block = Message<\"thru.core.v1.Block\"> & {\n /**\n * @generated from field: thru.core.v1.BlockHeader header = 1;\n */\n header?: BlockHeader;\n\n /**\n * @generated from field: optional thru.core.v1.BlockFooter footer = 2;\n */\n footer?: BlockFooter;\n\n /**\n * @generated from field: optional bytes body = 3;\n */\n body?: Uint8Array;\n\n /**\n * @generated from field: optional thru.common.v1.ConsensusStatus consensus_status = 4;\n */\n consensusStatus?: ConsensusStatus;\n};\n\n/**\n * Describes the message thru.core.v1.Block.\n * Use `create(BlockSchema)` to create a new message.\n */\nexport const BlockSchema: GenMessage<Block> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_block, 2);\n\n/**\n * RawBlock captures raw block bytes for direct access.\n *\n * @generated from message thru.core.v1.RawBlock\n */\nexport type RawBlock = Message<\"thru.core.v1.RawBlock\"> & {\n /**\n * @generated from field: uint64 slot = 1;\n */\n slot: bigint;\n\n /**\n * @generated from field: bytes raw_block = 2;\n */\n rawBlock: Uint8Array;\n};\n\n/**\n * Describes the message thru.core.v1.RawBlock.\n * Use `create(RawBlockSchema)` to create a new message.\n */\nexport const RawBlockSchema: GenMessage<RawBlock> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_block, 3);\n\n/**\n * BlockView controls how much of a block resource is returned.\n *\n * @generated from enum thru.core.v1.BlockView\n */\nexport enum BlockView {\n /**\n * @generated from enum value: BLOCK_VIEW_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * @generated from enum value: BLOCK_VIEW_HEADER_ONLY = 1;\n */\n HEADER_ONLY = 1,\n\n /**\n * @generated from enum value: BLOCK_VIEW_HEADER_AND_FOOTER = 2;\n */\n HEADER_AND_FOOTER = 2,\n\n /**\n * @generated from enum value: BLOCK_VIEW_BODY_ONLY = 3;\n */\n BODY_ONLY = 3,\n\n /**\n * @generated from enum value: BLOCK_VIEW_FULL = 4;\n */\n FULL = 4,\n}\n\n/**\n * Describes the enum thru.core.v1.BlockView.\n */\nexport const BlockViewSchema: GenEnum<BlockView> = /*@__PURE__*/\n enumDesc(file_thru_core_v1_block, 0);\n\n/**\n * ExecutionStatus enumerates block execution results.\n *\n * @generated from enum thru.core.v1.ExecutionStatus\n */\nexport enum ExecutionStatus {\n /**\n * @generated from enum value: EXECUTION_STATUS_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * @generated from enum value: EXECUTION_STATUS_PENDING = 1;\n */\n PENDING = 1,\n\n /**\n * @generated from enum value: EXECUTION_STATUS_EXECUTED = 2;\n */\n EXECUTED = 2,\n\n /**\n * @generated from enum value: EXECUTION_STATUS_FAILED = 3;\n */\n FAILED = 3,\n}\n\n/**\n * Describes the enum thru.core.v1.ExecutionStatus.\n */\nexport const ExecutionStatusSchema: GenEnum<ExecutionStatus> = /*@__PURE__*/\n enumDesc(file_thru_core_v1_block, 1);\n\n","// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file thru/core/v1/state.proto (package thru.core.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport { file_thru_core_v1_types } from \"./types_pb\";\nimport type { Pubkey } from \"../../common/v1/primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/core/v1/state.proto.\n */\nexport const file_thru_core_v1_state: GenFile = /*@__PURE__*/\n fileDesc(\"Chh0aHJ1L2NvcmUvdjEvc3RhdGUucHJvdG8SDHRocnUuY29yZS52MSKnAQoRU3RhdGVQcm9vZlJlcXVlc3QSLAoHYWRkcmVzcxgBIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjUKCnByb29mX3R5cGUYAiABKA4yHC50aHJ1LmNvcmUudjEuU3RhdGVQcm9vZlR5cGVCA+BBAhIdCgt0YXJnZXRfc2xvdBgDIAEoBEID4EEBSACIAQFCDgoMX3RhcmdldF9zbG90IjMKClN0YXRlUHJvb2YSEgoFcHJvb2YYASABKAxCA+BBAhIRCgRzbG90GAIgASgEQgPgQQIqjwEKDlN0YXRlUHJvb2ZUeXBlEiAKHFNUQVRFX1BST09GX1RZUEVfVU5TUEVDSUZJRUQQABIdChlTVEFURV9QUk9PRl9UWVBFX0NSRUFUSU5HEAESHQoZU1RBVEVfUFJPT0ZfVFlQRV9VUERBVElORxACEh0KGVNUQVRFX1BST09GX1RZUEVfRVhJU1RJTkcQA0K5AQoQY29tLnRocnUuY29yZS52MUIKU3RhdGVQcm90b1ABWkBnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L2NvcmUvdjE7Y29yZXYxogIDVENYqgIMVGhydS5Db3JlLlYxugIEVEhVQ8oCDFRocnVcQ29yZVxWMeICGFRocnVcQ29yZVxWMVxHUEJNZXRhZGF0YeoCDlRocnU6OkNvcmU6OlYxYgZwcm90bzM\", [file_google_api_field_behavior, file_thru_core_v1_types, file_thru_common_v1_primitives]);\n\n/**\n * StateProofRequest describes a request to generate an account state proof.\n *\n * @generated from message thru.core.v1.StateProofRequest\n */\nexport type StateProofRequest = Message<\"thru.core.v1.StateProofRequest\"> & {\n /**\n * @generated from field: thru.common.v1.Pubkey address = 1;\n */\n address?: Pubkey;\n\n /**\n * @generated from field: thru.core.v1.StateProofType proof_type = 2;\n */\n proofType: StateProofType;\n\n /**\n * @generated from field: optional uint64 target_slot = 3;\n */\n targetSlot?: bigint;\n};\n\n/**\n * Describes the message thru.core.v1.StateProofRequest.\n * Use `create(StateProofRequestSchema)` to create a new message.\n */\nexport const StateProofRequestSchema: GenMessage<StateProofRequest> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_state, 0);\n\n/**\n * StateProof returns binary proof data along with context.\n *\n * @generated from message thru.core.v1.StateProof\n */\nexport type StateProof = Message<\"thru.core.v1.StateProof\"> & {\n /**\n * @generated from field: bytes proof = 1;\n */\n proof: Uint8Array;\n\n /**\n * @generated from field: uint64 slot = 2;\n */\n slot: bigint;\n};\n\n/**\n * Describes the message thru.core.v1.StateProof.\n * Use `create(StateProofSchema)` to create a new message.\n */\nexport const StateProofSchema: GenMessage<StateProof> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_state, 1);\n\n/**\n * StateProofType selects the type of state proof to generate.\n *\n * @generated from enum thru.core.v1.StateProofType\n */\nexport enum StateProofType {\n /**\n * @generated from enum value: STATE_PROOF_TYPE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * @generated from enum value: STATE_PROOF_TYPE_CREATING = 1;\n */\n CREATING = 1,\n\n /**\n * @generated from enum value: STATE_PROOF_TYPE_UPDATING = 2;\n */\n UPDATING = 2,\n\n /**\n * @generated from enum value: STATE_PROOF_TYPE_EXISTING = 3;\n */\n EXISTING = 3,\n}\n\n/**\n * Describes the enum thru.core.v1.StateProofType.\n */\nexport const StateProofTypeSchema: GenEnum<StateProofType> = /*@__PURE__*/\n enumDesc(file_thru_core_v1_state, 0);\n\n","// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file thru/core/v1/transaction.proto (package thru.core.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport { file_thru_core_v1_types } from \"./types_pb\";\nimport type { Pubkey, Signature } from \"../../common/v1/primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/core/v1/transaction.proto.\n */\nexport const file_thru_core_v1_transaction: GenFile = /*@__PURE__*/\n fileDesc(\"Ch50aHJ1L2NvcmUvdjEvdHJhbnNhY3Rpb24ucHJvdG8SDHRocnUuY29yZS52MSKgBAoRVHJhbnNhY3Rpb25IZWFkZXISOwoTZmVlX3BheWVyX3NpZ25hdHVyZRgBIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEhQKB3ZlcnNpb24YAiABKA1CA+BBAhISCgVmbGFncxgDIAEoDUID4EECEiUKGHJlYWR3cml0ZV9hY2NvdW50c19jb3VudBgEIAEoDUID4EECEiQKF3JlYWRvbmx5X2FjY291bnRzX2NvdW50GAUgASgNQgPgQQISIgoVaW5zdHJ1Y3Rpb25fZGF0YV9zaXplGAYgASgNQgPgQQISJAoXcmVxdWVzdGVkX2NvbXB1dGVfdW5pdHMYByABKA1CA+BBAhIiChVyZXF1ZXN0ZWRfc3RhdGVfdW5pdHMYCCABKA1CA+BBAhIjChZyZXF1ZXN0ZWRfbWVtb3J5X3VuaXRzGAkgASgNQgPgQQISGQoMZXhwaXJ5X2FmdGVyGAogASgNQgPgQQISEAoDZmVlGAsgASgEQgPgQQISEgoFbm9uY2UYDCABKARCA+BBAhIXCgpzdGFydF9zbG90GA0gASgEQgPgQQISNQoQZmVlX3BheWVyX3B1YmtleRgOIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjMKDnByb2dyYW1fcHVia2V5GA8gASgLMhYudGhydS5jb21tb24udjEuUHVia2V5QgPgQQIi8gMKGlRyYW5zYWN0aW9uRXhlY3V0aW9uUmVzdWx0EiMKFmNvbnN1bWVkX2NvbXB1dGVfdW5pdHMYASABKA1CA+BBAhIiChVjb25zdW1lZF9tZW1vcnlfdW5pdHMYAiABKA1CA+BBAhIhChRjb25zdW1lZF9zdGF0ZV91bml0cxgDIAEoDUID4EECEhwKD3VzZXJfZXJyb3JfY29kZRgEIAEoBEID4EECEjcKCHZtX2Vycm9yGAUgASgOMiAudGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uVm1FcnJvckID4EECEh0KEGV4ZWN1dGlvbl9yZXN1bHQYBiABKARCA+BBAhIXCgpwYWdlc191c2VkGAcgASgNQgPgQQISGQoMZXZlbnRzX2NvdW50GAggASgNQgPgQQISGAoLZXZlbnRzX3NpemUYCSABKA1CA+BBAhI3ChJyZWFkd3JpdGVfYWNjb3VudHMYCiADKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBARI2ChFyZWFkb25seV9hY2NvdW50cxgLIAMoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EEBEjMKBmV2ZW50cxgMIAMoCzIeLnRocnUuY29yZS52MS5UcmFuc2FjdGlvbkV2ZW50QgPgQQEingEKEFRyYW5zYWN0aW9uRXZlbnQSFQoIZXZlbnRfaWQYASABKAlCA+BBAhIVCghjYWxsX2lkeBgCIAEoDUID4EECEhgKC3Byb2dyYW1faWR4GAMgASgNQgPgQQISLAoHcHJvZ3JhbRgEIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEhQKB3BheWxvYWQYBSABKAxCA+BBAiLWAgoLVHJhbnNhY3Rpb24SMQoJc2lnbmF0dXJlGAEgASgLMhkudGhydS5jb21tb24udjEuU2lnbmF0dXJlQgPgQQISNAoGaGVhZGVyGAIgASgLMh8udGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uSGVhZGVyQgPgQQISIAoEYm9keRgDIAEoDEIN4EEBukgHegUYgICACEgAiAEBEkwKEGV4ZWN1dGlvbl9yZXN1bHQYBCABKAsyKC50aHJ1LmNvcmUudjEuVHJhbnNhY3Rpb25FeGVjdXRpb25SZXN1bHRCA+BBAUgBiAEBEhYKBHNsb3QYBSABKARCA+BBAUgCiAEBEh4KDGJsb2NrX29mZnNldBgGIAEoDUID4EEBSAOIAQFCBwoFX2JvZHlCEwoRX2V4ZWN1dGlvbl9yZXN1bHRCBwoFX3Nsb3RCDwoNX2Jsb2NrX29mZnNldCJrCg5SYXdUcmFuc2FjdGlvbhIxCglzaWduYXR1cmUYASABKAsyGS50aHJ1LmNvbW1vbi52MS5TaWduYXR1cmVCA+BBAhImCg9yYXdfdHJhbnNhY3Rpb24YAiABKAxCDeBBArpIB3oFGICAgAgquwEKD1RyYW5zYWN0aW9uVmlldxIgChxUUkFOU0FDVElPTl9WSUVXX1VOU1BFQ0lGSUVEEAASIwofVFJBTlNBQ1RJT05fVklFV19TSUdOQVRVUkVfT05MWRABEiAKHFRSQU5TQUNUSU9OX1ZJRVdfSEVBREVSX09OTFkQAhIkCiBUUkFOU0FDVElPTl9WSUVXX0hFQURFUl9BTkRfQk9EWRADEhkKFVRSQU5TQUNUSU9OX1ZJRVdfRlVMTBAEKpgMChJUcmFuc2FjdGlvblZtRXJyb3ISIgoeVFJBTlNBQ1RJT05fVk1fRVhFQ1VURV9TVUNDRVNTEAASMAojVFJBTlNBQ1RJT05fVk1fRVJST1JfSU5WQUxJRF9GT1JNQVQQgf7/////////ARIxCiRUUkFOU0FDVElPTl9WTV9FUlJPUl9JTlZBTElEX1ZFUlNJT04Qgv7/////////ARIvCiJUUkFOU0FDVElPTl9WTV9FUlJPUl9JTlZBTElEX0ZMQUdTEIP+/////////wESMwomVFJBTlNBQ1RJT05fVk1fRVJST1JfSU5WQUxJRF9TSUdOQVRVUkUQhP7/////////ARIzCiZUUkFOU0FDVElPTl9WTV9FUlJPUl9EVVBMSUNBVEVfQUNDT1VOVBCF/v////////8BEjMKJlRSQU5TQUNUSU9OX1ZNX0VSUk9SX1VOU09SVEVEX0FDQ09VTlRTEIb+/////////wESPQowVFJBTlNBQ1RJT05fVk1fRVJST1JfVU5TT1JURURfUkVBRFdSSVRFX0FDQ09VTlRTEIf+/////////wESPAovVFJBTlNBQ1RJT05fVk1fRVJST1JfVU5TT1JURURfUkVBRE9OTFlfQUNDT1VOVFMQiP7/////////ARI+CjFUUkFOU0FDVElPTl9WTV9FUlJPUl9BQ0NPVU5UX0NPVU5UX0xJTUlUX0VYQ0VFREVEEIn+/////////wESLwoiVFJBTlNBQ1RJT05fVk1fRVJST1JfTk9OQ0VfVE9PX0xPVxCB/P////////8BEjAKI1RSQU5TQUNUSU9OX1ZNX0VSUk9SX05PTkNFX1RPT19ISUdIEIL8/////////wESQAozVFJBTlNBQ1RJT05fVk1fRVJST1JfSU5TVUZGSUNJRU5UX0ZFRV9QQVlFUl9CQUxBTkNFEIP8/////////wESQgo1VFJBTlNBQ1RJT05fVk1fRVJST1JfRkVFX1BBWUVSX0FDQ09VTlRfRE9FU19OT1RfRVhJU1QQhPz/////////ARIuCiFUUkFOU0FDVElPTl9WTV9FUlJPUl9OT1RfTElWRV9ZRVQQhfz/////////ARIpChxUUkFOU0FDVElPTl9WTV9FUlJPUl9FWFBJUkVEEIb8/////////wESPwoyVFJBTlNBQ1RJT05fVk1fRVJST1JfSU5WQUxJRF9GRUVfUEFZRVJfU1RBVEVfUFJPT0YQh/z/////////ARJECjdUUkFOU0FDVElPTl9WTV9FUlJPUl9JTlZBTElEX0ZFRV9QQVlFUl9TVEFURV9QUk9PRl9UWVBFEIj8/////////wESRAo3VFJBTlNBQ1RJT05fVk1fRVJST1JfSU5WQUxJRF9GRUVfUEFZRVJfU1RBVEVfUFJPT0ZfU0xPVBCJ/P////////8BEkEKNFRSQU5TQUNUSU9OX1ZNX0VSUk9SX0lOVkFMSURfRkVFX1BBWUVSX0FDQ09VTlRfT1dORVIQivz/////////ARJNCkBUUkFOU0FDVElPTl9WTV9FUlJPUl9JTlZBTElEX0ZFRV9QQVlFUl9TVEFURV9QUk9PRl9BQ0NPVU5UX09XTkVSEIv8/////////wESVApHVFJBTlNBQ1RJT05fVk1fRVJST1JfSU5WQUxJRF9GRUVfUEFZRVJfU1RBVEVfUFJPT0ZfQUNDT1VOVF9NRVRBX0RBVEFfU1oQjPz/////////ARIrCh5UUkFOU0FDVElPTl9WTV9FUlJPUl9WTV9GQUlMRUQQgfr/////////ARI5CixUUkFOU0FDVElPTl9WTV9FUlJPUl9JTlZBTElEX1BST0dSQU1fQUNDT1VOVBCC+v////////8BEisKHlRSQU5TQUNUSU9OX1ZNX0VSUk9SX1ZNX1JFVkVSVBCD+v////////8BEi4KIVRSQU5TQUNUSU9OX1ZNX0VSUk9SX0NVX0VYSEFVU1RFRBCE+v////////8BEi4KIVRSQU5TQUNUSU9OX1ZNX0VSUk9SX1NVX0VYSEFVU1RFRBCF+v////////8BQr8BChBjb20udGhydS5jb3JlLnYxQhBUcmFuc2FjdGlvblByb3RvUAFaQGdpdGh1Yi5jb20vVW50by1MYWJzL3RocnUtbmV0L2dycGMvcGtnL3Byb3RvL3RocnUvY29yZS92MTtjb3JldjGiAgNUQ1iqAgxUaHJ1LkNvcmUuVjG6AgRUSFVDygIMVGhydVxDb3JlXFYx4gIYVGhydVxDb3JlXFYxXEdQQk1ldGFkYXRh6gIOVGhydTo6Q29yZTo6VjFiBnByb3RvMw\", [file_buf_validate_validate, file_google_api_field_behavior, file_thru_core_v1_types, file_thru_common_v1_primitives]);\n\n/**\n * TransactionHeader carries structured metadata for a transaction.\n *\n * @generated from message thru.core.v1.TransactionHeader\n */\nexport type TransactionHeader = Message<\"thru.core.v1.TransactionHeader\"> & {\n /**\n * @generated from field: thru.common.v1.Signature fee_payer_signature = 1;\n */\n feePayerSignature?: Signature;\n\n /**\n * @generated from field: uint32 version = 2;\n */\n version: number;\n\n /**\n * @generated from field: uint32 flags = 3;\n */\n flags: number;\n\n /**\n * @generated from field: uint32 readwrite_accounts_count = 4;\n */\n readwriteAccountsCount: number;\n\n /**\n * @generated from field: uint32 readonly_accounts_count = 5;\n */\n readonlyAccountsCount: number;\n\n /**\n * @generated from field: uint32 instruction_data_size = 6;\n */\n instructionDataSize: number;\n\n /**\n * @generated from field: uint32 requested_compute_units = 7;\n */\n requestedComputeUnits: number;\n\n /**\n * @generated from field: uint32 requested_state_units = 8;\n */\n requestedStateUnits: number;\n\n /**\n * @generated from field: uint32 requested_memory_units = 9;\n */\n requestedMemoryUnits: number;\n\n /**\n * @generated from field: uint32 expiry_after = 10;\n */\n expiryAfter: number;\n\n /**\n * @generated from field: uint64 fee = 11;\n */\n fee: bigint;\n\n /**\n * @generated from field: uint64 nonce = 12;\n */\n nonce: bigint;\n\n /**\n * @generated from field: uint64 start_slot = 13;\n */\n startSlot: bigint;\n\n /**\n * @generated from field: thru.common.v1.Pubkey fee_payer_pubkey = 14;\n */\n feePayerPubkey?: Pubkey;\n\n /**\n * @generated from field: thru.common.v1.Pubkey program_pubkey = 15;\n */\n programPubkey?: Pubkey;\n};\n\n/**\n * Describes the message thru.core.v1.TransactionHeader.\n * Use `create(TransactionHeaderSchema)` to create a new message.\n */\nexport const TransactionHeaderSchema: GenMessage<TransactionHeader> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_transaction, 0);\n\n/**\n * TransactionExecutionResult captures execution outcomes.\n *\n * @generated from message thru.core.v1.TransactionExecutionResult\n */\nexport type TransactionExecutionResult = Message<\"thru.core.v1.TransactionExecutionResult\"> & {\n /**\n * @generated from field: uint32 consumed_compute_units = 1;\n */\n consumedComputeUnits: number;\n\n /**\n * @generated from field: uint32 consumed_memory_units = 2;\n */\n consumedMemoryUnits: number;\n\n /**\n * @generated from field: uint32 consumed_state_units = 3;\n */\n consumedStateUnits: number;\n\n /**\n * @generated from field: uint64 user_error_code = 4;\n */\n userErrorCode: bigint;\n\n /**\n * @generated from field: thru.core.v1.TransactionVmError vm_error = 5;\n */\n vmError: TransactionVmError;\n\n /**\n * @generated from field: uint64 execution_result = 6;\n */\n executionResult: bigint;\n\n /**\n * @generated from field: uint32 pages_used = 7;\n */\n pagesUsed: number;\n\n /**\n * @generated from field: uint32 events_count = 8;\n */\n eventsCount: number;\n\n /**\n * @generated from field: uint32 events_size = 9;\n */\n eventsSize: number;\n\n /**\n * @generated from field: repeated thru.common.v1.Pubkey readwrite_accounts = 10;\n */\n readwriteAccounts: Pubkey[];\n\n /**\n * @generated from field: repeated thru.common.v1.Pubkey readonly_accounts = 11;\n */\n readonlyAccounts: Pubkey[];\n\n /**\n * @generated from field: repeated thru.core.v1.TransactionEvent events = 12;\n */\n events: TransactionEvent[];\n};\n\n/**\n * Describes the message thru.core.v1.TransactionExecutionResult.\n * Use `create(TransactionExecutionResultSchema)` to create a new message.\n */\nexport const TransactionExecutionResultSchema: GenMessage<TransactionExecutionResult> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_transaction, 1);\n\n/**\n * TransactionEvent describes an event emitted during transaction execution.\n *\n * @generated from message thru.core.v1.TransactionEvent\n */\nexport type TransactionEvent = Message<\"thru.core.v1.TransactionEvent\"> & {\n /**\n * @generated from field: string event_id = 1;\n */\n eventId: string;\n\n /**\n * @generated from field: uint32 call_idx = 2;\n */\n callIdx: number;\n\n /**\n * @generated from field: uint32 program_idx = 3;\n */\n programIdx: number;\n\n /**\n * @generated from field: thru.common.v1.Pubkey program = 4;\n */\n program?: Pubkey;\n\n /**\n * @generated from field: bytes payload = 5;\n */\n payload: Uint8Array;\n};\n\n/**\n * Describes the message thru.core.v1.TransactionEvent.\n * Use `create(TransactionEventSchema)` to create a new message.\n */\nexport const TransactionEventSchema: GenMessage<TransactionEvent> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_transaction, 2);\n\n/**\n * Transaction describes a fully decoded transaction resource.\n *\n * @generated from message thru.core.v1.Transaction\n */\nexport type Transaction = Message<\"thru.core.v1.Transaction\"> & {\n /**\n * @generated from field: thru.common.v1.Signature signature = 1;\n */\n signature?: Signature;\n\n /**\n * @generated from field: thru.core.v1.TransactionHeader header = 2;\n */\n header?: TransactionHeader;\n\n /**\n * @generated from field: optional bytes body = 3;\n */\n body?: Uint8Array;\n\n /**\n * @generated from field: optional thru.core.v1.TransactionExecutionResult execution_result = 4;\n */\n executionResult?: TransactionExecutionResult;\n\n /**\n * @generated from field: optional uint64 slot = 5;\n */\n slot?: bigint;\n\n /**\n * @generated from field: optional uint32 block_offset = 6;\n */\n blockOffset?: number;\n};\n\n/**\n * Describes the message thru.core.v1.Transaction.\n * Use `create(TransactionSchema)` to create a new message.\n */\nexport const TransactionSchema: GenMessage<Transaction> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_transaction, 3);\n\n/**\n * RawTransaction provides direct access to serialized transaction bytes.\n *\n * @generated from message thru.core.v1.RawTransaction\n */\nexport type RawTransaction = Message<\"thru.core.v1.RawTransaction\"> & {\n /**\n * @generated from field: thru.common.v1.Signature signature = 1;\n */\n signature?: Signature;\n\n /**\n * @generated from field: bytes raw_transaction = 2;\n */\n rawTransaction: Uint8Array;\n};\n\n/**\n * Describes the message thru.core.v1.RawTransaction.\n * Use `create(RawTransactionSchema)` to create a new message.\n */\nexport const RawTransactionSchema: GenMessage<RawTransaction> = /*@__PURE__*/\n messageDesc(file_thru_core_v1_transaction, 4);\n\n/**\n * TransactionView controls how transactions are materialized in responses.\n *\n * @generated from enum thru.core.v1.TransactionView\n */\nexport enum TransactionView {\n /**\n * @generated from enum value: TRANSACTION_VIEW_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * @generated from enum value: TRANSACTION_VIEW_SIGNATURE_ONLY = 1;\n */\n SIGNATURE_ONLY = 1,\n\n /**\n * @generated from enum value: TRANSACTION_VIEW_HEADER_ONLY = 2;\n */\n HEADER_ONLY = 2,\n\n /**\n * @generated from enum value: TRANSACTION_VIEW_HEADER_AND_BODY = 3;\n */\n HEADER_AND_BODY = 3,\n\n /**\n * @generated from enum value: TRANSACTION_VIEW_FULL = 4;\n */\n FULL = 4,\n}\n\n/**\n * Describes the enum thru.core.v1.TransactionView.\n */\nexport const TransactionViewSchema: GenEnum<TransactionView> = /*@__PURE__*/\n enumDesc(file_thru_core_v1_transaction, 0);\n\n/**\n * TransactionVmError enumerates runtime error codes returned by the executor.\n *\n * @generated from enum thru.core.v1.TransactionVmError\n */\nexport enum TransactionVmError {\n /**\n * TN_RUNTIME_TXN_EXECUTE_SUCCESS\n *\n * @generated from enum value: TRANSACTION_VM_EXECUTE_SUCCESS = 0;\n */\n TRANSACTION_VM_EXECUTE_SUCCESS = 0,\n\n /**\n * TN_RUNTIME_TXN_ERR_INVALID_FORMAT\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_FORMAT = -255;\n */\n TRANSACTION_VM_ERROR_INVALID_FORMAT = -255,\n\n /**\n * TN_RUNTIME_TXN_ERR_INVALID_VERSION\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_VERSION = -254;\n */\n TRANSACTION_VM_ERROR_INVALID_VERSION = -254,\n\n /**\n * TN_RUNTIME_TXN_ERR_INVALID_FLAGS\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_FLAGS = -253;\n */\n TRANSACTION_VM_ERROR_INVALID_FLAGS = -253,\n\n /**\n * TN_RUNTIME_TXN_ERR_INVALID_SIGNATURE\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_SIGNATURE = -252;\n */\n TRANSACTION_VM_ERROR_INVALID_SIGNATURE = -252,\n\n /**\n * TN_RUNTIME_TXN_ERR_DUPLICATE_ACCOUNT\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_DUPLICATE_ACCOUNT = -251;\n */\n TRANSACTION_VM_ERROR_DUPLICATE_ACCOUNT = -251,\n\n /**\n * TN_RUNTIME_TXN_ERR_UNSORTED_ACCOUNTS\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_UNSORTED_ACCOUNTS = -250;\n */\n TRANSACTION_VM_ERROR_UNSORTED_ACCOUNTS = -250,\n\n /**\n * TN_RUNTIME_TXN_ERR_UNSORTED_READWRITE_ACCOUNTS\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_UNSORTED_READWRITE_ACCOUNTS = -249;\n */\n TRANSACTION_VM_ERROR_UNSORTED_READWRITE_ACCOUNTS = -249,\n\n /**\n * TN_RUNTIME_TXN_ERR_UNSORTED_READONLY_ACCOUNTS\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_UNSORTED_READONLY_ACCOUNTS = -248;\n */\n TRANSACTION_VM_ERROR_UNSORTED_READONLY_ACCOUNTS = -248,\n\n /**\n * TN_RUNTIME_TXN_ERR_ACCOUNT_COUNT_LIMIT_EXCEEDED\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_ACCOUNT_COUNT_LIMIT_EXCEEDED = -247;\n */\n TRANSACTION_VM_ERROR_ACCOUNT_COUNT_LIMIT_EXCEEDED = -247,\n\n /**\n * TN_RUNTIME_TXN_ERR_NONCE_TOO_LOW\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_NONCE_TOO_LOW = -511;\n */\n TRANSACTION_VM_ERROR_NONCE_TOO_LOW = -511,\n\n /**\n * TN_RUNTIME_TXN_ERR_NONCE_TOO_HIGH\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_NONCE_TOO_HIGH = -510;\n */\n TRANSACTION_VM_ERROR_NONCE_TOO_HIGH = -510,\n\n /**\n * TN_RUNTIME_TXN_ERR_INSUFFICIENT_FEE_PAYER_BALANCE\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE = -509;\n */\n TRANSACTION_VM_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE = -509,\n\n /**\n * TN_RUNTIME_TXN_ERR_FEE_PAYER_ACCOUNT_DOES_NOT_EXIST\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_FEE_PAYER_ACCOUNT_DOES_NOT_EXIST = -508;\n */\n TRANSACTION_VM_ERROR_FEE_PAYER_ACCOUNT_DOES_NOT_EXIST = -508,\n\n /**\n * TN_RUNTIME_TXN_ERR_NOT_LIVE_YET\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_NOT_LIVE_YET = -507;\n */\n TRANSACTION_VM_ERROR_NOT_LIVE_YET = -507,\n\n /**\n * TN_RUNTIME_TXN_ERR_EXPIRED\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_EXPIRED = -506;\n */\n TRANSACTION_VM_ERROR_EXPIRED = -506,\n\n /**\n * TN_RUNTIME_TXN_ERR_INVALID_FEE_PAYER_STATE_PROOF\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF = -505;\n */\n TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF = -505,\n\n /**\n * TN_RUNTIME_TXN_ERR_INVALID_FEE_PAYER_STATE_PROOF_TYPE\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF_TYPE = -504;\n */\n TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF_TYPE = -504,\n\n /**\n * TN_RUNTIME_TXN_ERR_INVALID_FEE_PAYER_STATE_PROOF_SLOT\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF_SLOT = -503;\n */\n TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF_SLOT = -503,\n\n /**\n * TN_RUNTIME_TXN_ERR_INVALID_FEE_PAYER_ACCOUNT_OWNER\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_ACCOUNT_OWNER = -502;\n */\n TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_ACCOUNT_OWNER = -502,\n\n /**\n * TN_RUNTIME_TXN_ERR_INVALID_FEE_PAYER_STATE_PROOF_ACCOUNT_OWNER\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF_ACCOUNT_OWNER = -501;\n */\n TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF_ACCOUNT_OWNER = -501,\n\n /**\n * TN_RUNTIME_TXN_ERR_INVALID_FEE_PAYER_STATE_PROOF_ACCOUNT_META_DATA_SZ\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF_ACCOUNT_META_DATA_SZ = -500;\n */\n TRANSACTION_VM_ERROR_INVALID_FEE_PAYER_STATE_PROOF_ACCOUNT_META_DATA_SZ = -500,\n\n /**\n * TN_RUNTIME_TXN_ERR_VM_FAILED\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_VM_FAILED = -767;\n */\n TRANSACTION_VM_ERROR_VM_FAILED = -767,\n\n /**\n * TN_RUNTIME_TXN_ERR_INVALID_PROGRAM_ACCOUNT\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_INVALID_PROGRAM_ACCOUNT = -766;\n */\n TRANSACTION_VM_ERROR_INVALID_PROGRAM_ACCOUNT = -766,\n\n /**\n * TN_RUNTIME_TXN_ERR_VM_REVERT\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_VM_REVERT = -765;\n */\n TRANSACTION_VM_ERROR_VM_REVERT = -765,\n\n /**\n * TN_RUNTIME_TXN_ERR_CU_EXHAUSTED\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_CU_EXHAUSTED = -764;\n */\n TRANSACTION_VM_ERROR_CU_EXHAUSTED = -764,\n\n /**\n * TN_RUNTIME_TXN_ERR_SU_EXHAUSTED\n *\n * @generated from enum value: TRANSACTION_VM_ERROR_SU_EXHAUSTED = -763;\n */\n TRANSACTION_VM_ERROR_SU_EXHAUSTED = -763,\n}\n\n/**\n * Describes the enum thru.core.v1.TransactionVmError.\n */\nexport const TransactionVmErrorSchema: GenEnum<TransactionVmError> = /*@__PURE__*/\n enumDesc(file_thru_core_v1_transaction, 1);\n\n","// Copyright 2025 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file google/api/http.proto (package google.api, syntax proto3)\n/* eslint-disable */\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file google/api/http.proto.\n */\nexport const file_google_api_http: GenFile = /*@__PURE__*/\n fileDesc(\"ChVnb29nbGUvYXBpL2h0dHAucHJvdG8SCmdvb2dsZS5hcGkiVAoESHR0cBIjCgVydWxlcxgBIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGUSJwofZnVsbHlfZGVjb2RlX3Jlc2VydmVkX2V4cGFuc2lvbhgCIAEoCCKBAgoISHR0cFJ1bGUSEAoIc2VsZWN0b3IYASABKAkSDQoDZ2V0GAIgASgJSAASDQoDcHV0GAMgASgJSAASDgoEcG9zdBgEIAEoCUgAEhAKBmRlbGV0ZRgFIAEoCUgAEg8KBXBhdGNoGAYgASgJSAASLwoGY3VzdG9tGAggASgLMh0uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybkgAEgwKBGJvZHkYByABKAkSFQoNcmVzcG9uc2VfYm9keRgMIAEoCRIxChNhZGRpdGlvbmFsX2JpbmRpbmdzGAsgAygLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZUIJCgdwYXR0ZXJuIi8KEUN1c3RvbUh0dHBQYXR0ZXJuEgwKBGtpbmQYASABKAkSDAoEcGF0aBgCIAEoCUKnAQoOY29tLmdvb2dsZS5hcGlCCUh0dHBQcm90b1ABWkFnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9hbm5vdGF0aW9uczthbm5vdGF0aW9uc6ICA0dBWKoCCkdvb2dsZS5BcGnKAgpHb29nbGVcQXBp4gIWR29vZ2xlXEFwaVxHUEJNZXRhZGF0YeoCC0dvb2dsZTo6QXBpYgZwcm90bzM\");\n\n/**\n * Defines the HTTP configuration for an API service. It contains a list of\n * [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method\n * to one or more HTTP REST API methods.\n *\n * @generated from message google.api.Http\n */\nexport type Http = Message<\"google.api.Http\"> & {\n /**\n * A list of HTTP configuration rules that apply to individual API methods.\n *\n * **NOTE:** All service configuration rules follow \"last one wins\" order.\n *\n * @generated from field: repeated google.api.HttpRule rules = 1;\n */\n rules: HttpRule[];\n\n /**\n * When set to true, URL path parameters will be fully URI-decoded except in\n * cases of single segment matches in reserved expansion, where \"%2F\" will be\n * left encoded.\n *\n * The default behavior is to not decode RFC 6570 reserved characters in multi\n * segment matches.\n *\n * @generated from field: bool fully_decode_reserved_expansion = 2;\n */\n fullyDecodeReservedExpansion: boolean;\n};\n\n/**\n * Describes the message google.api.Http.\n * Use `create(HttpSchema)` to create a new message.\n */\nexport const HttpSchema: GenMessage<Http> = /*@__PURE__*/\n messageDesc(file_google_api_http, 0);\n\n/**\n * gRPC Transcoding\n *\n * gRPC Transcoding is a feature for mapping between a gRPC method and one or\n * more HTTP REST endpoints. It allows developers to build a single API service\n * that supports both gRPC APIs and REST APIs. Many systems, including [Google\n * APIs](https://github.com/googleapis/googleapis),\n * [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC\n * Gateway](https://github.com/grpc-ecosystem/grpc-gateway),\n * and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature\n * and use it for large scale production services.\n *\n * `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies\n * how different portions of the gRPC request message are mapped to the URL\n * path, URL query parameters, and HTTP request body. It also controls how the\n * gRPC response message is mapped to the HTTP response body. `HttpRule` is\n * typically specified as an `google.api.http` annotation on the gRPC method.\n *\n * Each mapping specifies a URL path template and an HTTP method. The path\n * template may refer to one or more fields in the gRPC request message, as long\n * as each field is a non-repeated field with a primitive (non-message) type.\n * The path template controls how fields of the request message are mapped to\n * the URL path.\n *\n * Example:\n *\n * service Messaging {\n * rpc GetMessage(GetMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * get: \"/v1/{name=messages/*}\"\n * };\n * }\n * }\n * message GetMessageRequest {\n * string name = 1; // Mapped to URL path.\n * }\n * message Message {\n * string text = 1; // The resource content.\n * }\n *\n * This enables an HTTP REST to gRPC mapping as below:\n *\n * - HTTP: `GET /v1/messages/123456`\n * - gRPC: `GetMessage(name: \"messages/123456\")`\n *\n * Any fields in the request message which are not bound by the path template\n * automatically become HTTP query parameters if there is no HTTP request body.\n * For example:\n *\n * service Messaging {\n * rpc GetMessage(GetMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * get:\"/v1/messages/{message_id}\"\n * };\n * }\n * }\n * message GetMessageRequest {\n * message SubMessage {\n * string subfield = 1;\n * }\n * string message_id = 1; // Mapped to URL path.\n * int64 revision = 2; // Mapped to URL query parameter `revision`.\n * SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`.\n * }\n *\n * This enables a HTTP JSON to RPC mapping as below:\n *\n * - HTTP: `GET /v1/messages/123456?revision=2&sub.subfield=foo`\n * - gRPC: `GetMessage(message_id: \"123456\" revision: 2 sub:\n * SubMessage(subfield: \"foo\"))`\n *\n * Note that fields which are mapped to URL query parameters must have a\n * primitive type or a repeated primitive type or a non-repeated message type.\n * In the case of a repeated type, the parameter can be repeated in the URL\n * as `...?param=A&param=B`. In the case of a message type, each field of the\n * message is mapped to a separate parameter, such as\n * `...?foo.a=A&foo.b=B&foo.c=C`.\n *\n * For HTTP methods that allow a request body, the `body` field\n * specifies the mapping. Consider a REST update method on the\n * message resource collection:\n *\n * service Messaging {\n * rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * patch: \"/v1/messages/{message_id}\"\n * body: \"message\"\n * };\n * }\n * }\n * message UpdateMessageRequest {\n * string message_id = 1; // mapped to the URL\n * Message message = 2; // mapped to the body\n * }\n *\n * The following HTTP JSON to RPC mapping is enabled, where the\n * representation of the JSON in the request body is determined by\n * protos JSON encoding:\n *\n * - HTTP: `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }`\n * - gRPC: `UpdateMessage(message_id: \"123456\" message { text: \"Hi!\" })`\n *\n * The special name `*` can be used in the body mapping to define that\n * every field not bound by the path template should be mapped to the\n * request body. This enables the following alternative definition of\n * the update method:\n *\n * service Messaging {\n * rpc UpdateMessage(Message) returns (Message) {\n * option (google.api.http) = {\n * patch: \"/v1/messages/{message_id}\"\n * body: \"*\"\n * };\n * }\n * }\n * message Message {\n * string message_id = 1;\n * string text = 2;\n * }\n *\n *\n * The following HTTP JSON to RPC mapping is enabled:\n *\n * - HTTP: `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }`\n * - gRPC: `UpdateMessage(message_id: \"123456\" text: \"Hi!\")`\n *\n * Note that when using `*` in the body mapping, it is not possible to\n * have HTTP parameters, as all fields not bound by the path end in\n * the body. This makes this option more rarely used in practice when\n * defining REST APIs. The common usage of `*` is in custom methods\n * which don't use the URL at all for transferring data.\n *\n * It is possible to define multiple HTTP methods for one RPC by using\n * the `additional_bindings` option. Example:\n *\n * service Messaging {\n * rpc GetMessage(GetMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * get: \"/v1/messages/{message_id}\"\n * additional_bindings {\n * get: \"/v1/users/{user_id}/messages/{message_id}\"\n * }\n * };\n * }\n * }\n * message GetMessageRequest {\n * string message_id = 1;\n * string user_id = 2;\n * }\n *\n * This enables the following two alternative HTTP JSON to RPC mappings:\n *\n * - HTTP: `GET /v1/messages/123456`\n * - gRPC: `GetMessage(message_id: \"123456\")`\n *\n * - HTTP: `GET /v1/users/me/messages/123456`\n * - gRPC: `GetMessage(user_id: \"me\" message_id: \"123456\")`\n *\n * Rules for HTTP mapping\n *\n * 1. Leaf request fields (recursive expansion nested messages in the request\n * message) are classified into three categories:\n * - Fields referred by the path template. They are passed via the URL path.\n * - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They\n * are passed via the HTTP\n * request body.\n * - All other fields are passed via the URL query parameters, and the\n * parameter name is the field path in the request message. A repeated\n * field can be represented as multiple query parameters under the same\n * name.\n * 2. If [HttpRule.body][google.api.HttpRule.body] is \"*\", there is no URL\n * query parameter, all fields\n * are passed via URL path and HTTP request body.\n * 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP\n * request body, all\n * fields are passed via URL path and URL query parameters.\n *\n * Path template syntax\n *\n * Template = \"/\" Segments [ Verb ] ;\n * Segments = Segment { \"/\" Segment } ;\n * Segment = \"*\" | \"**\" | LITERAL | Variable ;\n * Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\n * FieldPath = IDENT { \".\" IDENT } ;\n * Verb = \":\" LITERAL ;\n *\n * The syntax `*` matches a single URL path segment. The syntax `**` matches\n * zero or more URL path segments, which must be the last part of the URL path\n * except the `Verb`.\n *\n * The syntax `Variable` matches part of the URL path as specified by its\n * template. A variable template must not contain other variables. If a variable\n * matches a single path segment, its template may be omitted, e.g. `{var}`\n * is equivalent to `{var=*}`.\n *\n * The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL`\n * contains any reserved character, such characters should be percent-encoded\n * before the matching.\n *\n * If a variable contains exactly one path segment, such as `\"{var}\"` or\n * `\"{var=*}\"`, when such a variable is expanded into a URL path on the client\n * side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The\n * server side does the reverse decoding. Such variables show up in the\n * [Discovery\n * Document](https://developers.google.com/discovery/v1/reference/apis) as\n * `{var}`.\n *\n * If a variable contains multiple path segments, such as `\"{var=foo/*}\"`\n * or `\"{var=**}\"`, when such a variable is expanded into a URL path on the\n * client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded.\n * The server side does the reverse decoding, except \"%2F\" and \"%2f\" are left\n * unchanged. Such variables show up in the\n * [Discovery\n * Document](https://developers.google.com/discovery/v1/reference/apis) as\n * `{+var}`.\n *\n * Using gRPC API Service Configuration\n *\n * gRPC API Service Configuration (service config) is a configuration language\n * for configuring a gRPC service to become a user-facing product. The\n * service config is simply the YAML representation of the `google.api.Service`\n * proto message.\n *\n * As an alternative to annotating your proto file, you can configure gRPC\n * transcoding in your service config YAML files. You do this by specifying a\n * `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same\n * effect as the proto annotation. This can be particularly useful if you\n * have a proto that is reused in multiple services. Note that any transcoding\n * specified in the service config will override any matching transcoding\n * configuration in the proto.\n *\n * The following example selects a gRPC method and applies an `HttpRule` to it:\n *\n * http:\n * rules:\n * - selector: example.v1.Messaging.GetMessage\n * get: /v1/messages/{message_id}/{sub.subfield}\n *\n * Special notes\n *\n * When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the\n * proto to JSON conversion must follow the [proto3\n * specification](https://developers.google.com/protocol-buffers/docs/proto3#json).\n *\n * While the single segment variable follows the semantics of\n * [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\n * Expansion, the multi segment variable **does not** follow RFC 6570 Section\n * 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion\n * does not expand special characters like `?` and `#`, which would lead\n * to invalid URLs. As the result, gRPC Transcoding uses a custom encoding\n * for multi segment variables.\n *\n * The path variables **must not** refer to any repeated or mapped field,\n * because client libraries are not capable of handling such variable expansion.\n *\n * The path variables **must not** capture the leading \"/\" character. The reason\n * is that the most common use case \"{var}\" does not capture the leading \"/\"\n * character. For consistency, all path variables must share the same behavior.\n *\n * Repeated message fields must not be mapped to URL query parameters, because\n * no client library can support such complicated mapping.\n *\n * If an API needs to use a JSON array for request or response body, it can map\n * the request or response body to a repeated field. However, some gRPC\n * Transcoding implementations may not support this feature.\n *\n * @generated from message google.api.HttpRule\n */\nexport type HttpRule = Message<\"google.api.HttpRule\"> & {\n /**\n * Selects a method to which this rule applies.\n *\n * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n * details.\n *\n * @generated from field: string selector = 1;\n */\n selector: string;\n\n /**\n * Determines the URL pattern is matched by this rules. This pattern can be\n * used with any of the {get|put|post|delete|patch} methods. A custom method\n * can be defined using the 'custom' field.\n *\n * @generated from oneof google.api.HttpRule.pattern\n */\n pattern: {\n /**\n * Maps to HTTP GET. Used for listing and getting information about\n * resources.\n *\n * @generated from field: string get = 2;\n */\n value: string;\n case: \"get\";\n } | {\n /**\n * Maps to HTTP PUT. Used for replacing a resource.\n *\n * @generated from field: string put = 3;\n */\n value: string;\n case: \"put\";\n } | {\n /**\n * Maps to HTTP POST. Used for creating a resource or performing an action.\n *\n * @generated from field: string post = 4;\n */\n value: string;\n case: \"post\";\n } | {\n /**\n * Maps to HTTP DELETE. Used for deleting a resource.\n *\n * @generated from field: string delete = 5;\n */\n value: string;\n case: \"delete\";\n } | {\n /**\n * Maps to HTTP PATCH. Used for updating a resource.\n *\n * @generated from field: string patch = 6;\n */\n value: string;\n case: \"patch\";\n } | {\n /**\n * The custom pattern is used for specifying an HTTP method that is not\n * included in the `pattern` field, such as HEAD, or \"*\" to leave the\n * HTTP method unspecified for this rule. The wild-card rule is useful\n * for services that provide content to Web (HTML) clients.\n *\n * @generated from field: google.api.CustomHttpPattern custom = 8;\n */\n value: CustomHttpPattern;\n case: \"custom\";\n } | { case: undefined; value?: undefined };\n\n /**\n * The name of the request field whose value is mapped to the HTTP request\n * body, or `*` for mapping all request fields not captured by the path\n * pattern to the HTTP body, or omitted for not having any HTTP request body.\n *\n * NOTE: the referred field must be present at the top-level of the request\n * message type.\n *\n * @generated from field: string body = 7;\n */\n body: string;\n\n /**\n * Optional. The name of the response field whose value is mapped to the HTTP\n * response body. When omitted, the entire response message will be used\n * as the HTTP response body.\n *\n * NOTE: The referred field must be present at the top-level of the response\n * message type.\n *\n * @generated from field: string response_body = 12;\n */\n responseBody: string;\n\n /**\n * Additional HTTP bindings for the selector. Nested bindings must\n * not contain an `additional_bindings` field themselves (that is,\n * the nesting may only be one level deep).\n *\n * @generated from field: repeated google.api.HttpRule additional_bindings = 11;\n */\n additionalBindings: HttpRule[];\n};\n\n/**\n * Describes the message google.api.HttpRule.\n * Use `create(HttpRuleSchema)` to create a new message.\n */\nexport const HttpRuleSchema: GenMessage<HttpRule> = /*@__PURE__*/\n messageDesc(file_google_api_http, 1);\n\n/**\n * A custom pattern is used for defining custom HTTP verb.\n *\n * @generated from message google.api.CustomHttpPattern\n */\nexport type CustomHttpPattern = Message<\"google.api.CustomHttpPattern\"> & {\n /**\n * The name of this custom HTTP verb.\n *\n * @generated from field: string kind = 1;\n */\n kind: string;\n\n /**\n * The path matched by this custom verb.\n *\n * @generated from field: string path = 2;\n */\n path: string;\n};\n\n/**\n * Describes the message google.api.CustomHttpPattern.\n * Use `create(CustomHttpPatternSchema)` to create a new message.\n */\nexport const CustomHttpPatternSchema: GenMessage<CustomHttpPattern> = /*@__PURE__*/\n messageDesc(file_google_api_http, 2);\n\n","// Copyright 2025 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file google/api/annotations.proto (package google.api, syntax proto3)\n/* eslint-disable */\n\nimport type { GenExtension, GenFile } from \"@bufbuild/protobuf/codegenv2\";\nimport { extDesc, fileDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { HttpRule } from \"./http_pb\";\nimport { file_google_api_http } from \"./http_pb\";\nimport type { MethodOptions } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_descriptor } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file google/api/annotations.proto.\n */\nexport const file_google_api_annotations: GenFile = /*@__PURE__*/\n fileDesc(\"Chxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvEgpnb29nbGUuYXBpOksKBGh0dHASHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxiwyrwiIAEoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBGh0dHBCrgEKDmNvbS5nb29nbGUuYXBpQhBBbm5vdGF0aW9uc1Byb3RvUAFaQWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpL2Fubm90YXRpb25zO2Fubm90YXRpb25zogIDR0FYqgIKR29vZ2xlLkFwacoCCkdvb2dsZVxBcGniAhZHb29nbGVcQXBpXEdQQk1ldGFkYXRh6gILR29vZ2xlOjpBcGliBnByb3RvMw\", [file_google_api_http, file_google_protobuf_descriptor]);\n\n/**\n * See `HttpRule`.\n *\n * @generated from extension: google.api.HttpRule http = 72295728;\n */\nexport const http: GenExtension<MethodOptions, HttpRule> = /*@__PURE__*/\n extDesc(file_google_api_annotations, 0);\n\n","// Copyright 2025 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file google/api/launch_stage.proto (package google.api, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc } from \"@bufbuild/protobuf/codegenv2\";\n\n/**\n * Describes the file google/api/launch_stage.proto.\n */\nexport const file_google_api_launch_stage: GenFile = /*@__PURE__*/\n fileDesc(\"Ch1nb29nbGUvYXBpL2xhdW5jaF9zdGFnZS5wcm90bxIKZ29vZ2xlLmFwaSqMAQoLTGF1bmNoU3RhZ2USHAoYTEFVTkNIX1NUQUdFX1VOU1BFQ0lGSUVEEAASEQoNVU5JTVBMRU1FTlRFRBAGEg0KCVBSRUxBVU5DSBAHEhAKDEVBUkxZX0FDQ0VTUxABEgkKBUFMUEhBEAISCAoEQkVUQRADEgYKAkdBEAQSDgoKREVQUkVDQVRFRBAFQpoBCg5jb20uZ29vZ2xlLmFwaUIQTGF1bmNoU3RhZ2VQcm90b1ABWi1nb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaTthcGmiAgNHQViqAgpHb29nbGUuQXBpygIKR29vZ2xlXEFwaeICFkdvb2dsZVxBcGlcR1BCTWV0YWRhdGHqAgtHb29nbGU6OkFwaWIGcHJvdG8z\");\n\n/**\n * The launch stage as defined by [Google Cloud Platform\n * Launch Stages](https://cloud.google.com/terms/launch-stages).\n *\n * @generated from enum google.api.LaunchStage\n */\nexport enum LaunchStage {\n /**\n * Do not use this default value.\n *\n * @generated from enum value: LAUNCH_STAGE_UNSPECIFIED = 0;\n */\n LAUNCH_STAGE_UNSPECIFIED = 0,\n\n /**\n * The feature is not yet implemented. Users can not use it.\n *\n * @generated from enum value: UNIMPLEMENTED = 6;\n */\n UNIMPLEMENTED = 6,\n\n /**\n * Prelaunch features are hidden from users and are only visible internally.\n *\n * @generated from enum value: PRELAUNCH = 7;\n */\n PRELAUNCH = 7,\n\n /**\n * Early Access features are limited to a closed group of testers. To use\n * these features, you must sign up in advance and sign a Trusted Tester\n * agreement (which includes confidentiality provisions). These features may\n * be unstable, changed in backward-incompatible ways, and are not\n * guaranteed to be released.\n *\n * @generated from enum value: EARLY_ACCESS = 1;\n */\n EARLY_ACCESS = 1,\n\n /**\n * Alpha is a limited availability test for releases before they are cleared\n * for widespread use. By Alpha, all significant design issues are resolved\n * and we are in the process of verifying functionality. Alpha customers\n * need to apply for access, agree to applicable terms, and have their\n * projects allowlisted. Alpha releases don't have to be feature complete,\n * no SLAs are provided, and there are no technical support obligations, but\n * they will be far enough along that customers can actually use them in\n * test environments or for limited-use tests -- just like they would in\n * normal production cases.\n *\n * @generated from enum value: ALPHA = 2;\n */\n ALPHA = 2,\n\n /**\n * Beta is the point at which we are ready to open a release for any\n * customer to use. There are no SLA or technical support obligations in a\n * Beta release. Products will be complete from a feature perspective, but\n * may have some open outstanding issues. Beta releases are suitable for\n * limited production use cases.\n *\n * @generated from enum value: BETA = 3;\n */\n BETA = 3,\n\n /**\n * GA features are open to all developers and are considered stable and\n * fully qualified for production use.\n *\n * @generated from enum value: GA = 4;\n */\n GA = 4,\n\n /**\n * Deprecated features are scheduled to be shut down and removed. For more\n * information, see the \"Deprecation Policy\" section of our [Terms of\n * Service](https://cloud.google.com/terms/)\n * and the [Google Cloud Platform Subject to the Deprecation\n * Policy](https://cloud.google.com/terms/deprecation) documentation.\n *\n * @generated from enum value: DEPRECATED = 5;\n */\n DEPRECATED = 5,\n}\n\n/**\n * Describes the enum google.api.LaunchStage.\n */\nexport const LaunchStageSchema: GenEnum<LaunchStage> = /*@__PURE__*/\n enumDesc(file_google_api_launch_stage, 0);\n\n","// Copyright 2025 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file google/api/client.proto (package google.api, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenExtension, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, extDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { LaunchStage } from \"./launch_stage_pb\";\nimport { file_google_api_launch_stage } from \"./launch_stage_pb\";\nimport type { Duration, MethodOptions, ServiceOptions } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_descriptor, file_google_protobuf_duration } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file google/api/client.proto.\n */\nexport const file_google_api_client: GenFile = /*@__PURE__*/\n fileDesc(\"Chdnb29nbGUvYXBpL2NsaWVudC5wcm90bxIKZ29vZ2xlLmFwaSK+AQoWQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxIeChJyZWZlcmVuY2VfZG9jc191cmkYASABKAlCAhgBEjoKDGRlc3RpbmF0aW9ucxgCIAMoDjIkLmdvb2dsZS5hcGkuQ2xpZW50TGlicmFyeURlc3RpbmF0aW9uEkgKGnNlbGVjdGl2ZV9nYXBpY19nZW5lcmF0aW9uGAMgASgLMiQuZ29vZ2xlLmFwaS5TZWxlY3RpdmVHYXBpY0dlbmVyYXRpb24i+wMKFUNsaWVudExpYnJhcnlTZXR0aW5ncxIPCgd2ZXJzaW9uGAEgASgJEi0KDGxhdW5jaF9zdGFnZRgCIAEoDjIXLmdvb2dsZS5hcGkuTGF1bmNoU3RhZ2USGgoScmVzdF9udW1lcmljX2VudW1zGAMgASgIEi8KDWphdmFfc2V0dGluZ3MYFSABKAsyGC5nb29nbGUuYXBpLkphdmFTZXR0aW5ncxItCgxjcHBfc2V0dGluZ3MYFiABKAsyFy5nb29nbGUuYXBpLkNwcFNldHRpbmdzEi0KDHBocF9zZXR0aW5ncxgXIAEoCzIXLmdvb2dsZS5hcGkuUGhwU2V0dGluZ3MSMwoPcHl0aG9uX3NldHRpbmdzGBggASgLMhouZ29vZ2xlLmFwaS5QeXRob25TZXR0aW5ncxIvCg1ub2RlX3NldHRpbmdzGBkgASgLMhguZ29vZ2xlLmFwaS5Ob2RlU2V0dGluZ3MSMwoPZG90bmV0X3NldHRpbmdzGBogASgLMhouZ29vZ2xlLmFwaS5Eb3RuZXRTZXR0aW5ncxIvCg1ydWJ5X3NldHRpbmdzGBsgASgLMhguZ29vZ2xlLmFwaS5SdWJ5U2V0dGluZ3MSKwoLZ29fc2V0dGluZ3MYHCABKAsyFi5nb29nbGUuYXBpLkdvU2V0dGluZ3MiqAMKClB1Ymxpc2hpbmcSMwoPbWV0aG9kX3NldHRpbmdzGAIgAygLMhouZ29vZ2xlLmFwaS5NZXRob2RTZXR0aW5ncxIVCg1uZXdfaXNzdWVfdXJpGGUgASgJEhkKEWRvY3VtZW50YXRpb25fdXJpGGYgASgJEhYKDmFwaV9zaG9ydF9uYW1lGGcgASgJEhQKDGdpdGh1Yl9sYWJlbBhoIAEoCRIeChZjb2Rlb3duZXJfZ2l0aHViX3RlYW1zGGkgAygJEhYKDmRvY190YWdfcHJlZml4GGogASgJEjsKDG9yZ2FuaXphdGlvbhhrIAEoDjIlLmdvb2dsZS5hcGkuQ2xpZW50TGlicmFyeU9yZ2FuaXphdGlvbhI7ChBsaWJyYXJ5X3NldHRpbmdzGG0gAygLMiEuZ29vZ2xlLmFwaS5DbGllbnRMaWJyYXJ5U2V0dGluZ3MSKQohcHJvdG9fcmVmZXJlbmNlX2RvY3VtZW50YXRpb25fdXJpGG4gASgJEigKIHJlc3RfcmVmZXJlbmNlX2RvY3VtZW50YXRpb25fdXJpGG8gASgJIuMBCgxKYXZhU2V0dGluZ3MSFwoPbGlicmFyeV9wYWNrYWdlGAEgASgJEkwKE3NlcnZpY2VfY2xhc3NfbmFtZXMYAiADKAsyLy5nb29nbGUuYXBpLkphdmFTZXR0aW5ncy5TZXJ2aWNlQ2xhc3NOYW1lc0VudHJ5EjIKBmNvbW1vbhgDIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxo4ChZTZXJ2aWNlQ2xhc3NOYW1lc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiQQoLQ3BwU2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzIkEKC1BocFNldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncyKbAgoOUHl0aG9uU2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzEk4KFWV4cGVyaW1lbnRhbF9mZWF0dXJlcxgCIAEoCzIvLmdvb2dsZS5hcGkuUHl0aG9uU2V0dGluZ3MuRXhwZXJpbWVudGFsRmVhdHVyZXMahAEKFEV4cGVyaW1lbnRhbEZlYXR1cmVzEh0KFXJlc3RfYXN5bmNfaW9fZW5hYmxlZBgBIAEoCBInCh9wcm90b2J1Zl9weXRob25pY190eXBlc19lbmFibGVkGAIgASgIEiQKHHVudmVyc2lvbmVkX3BhY2thZ2VfZGlzYWJsZWQYAyABKAgiQgoMTm9kZVNldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncyKqAwoORG90bmV0U2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzEkkKEHJlbmFtZWRfc2VydmljZXMYAiADKAsyLy5nb29nbGUuYXBpLkRvdG5ldFNldHRpbmdzLlJlbmFtZWRTZXJ2aWNlc0VudHJ5EksKEXJlbmFtZWRfcmVzb3VyY2VzGAMgAygLMjAuZ29vZ2xlLmFwaS5Eb3RuZXRTZXR0aW5ncy5SZW5hbWVkUmVzb3VyY2VzRW50cnkSGQoRaWdub3JlZF9yZXNvdXJjZXMYBCADKAkSIAoYZm9yY2VkX25hbWVzcGFjZV9hbGlhc2VzGAUgAygJEh4KFmhhbmR3cml0dGVuX3NpZ25hdHVyZXMYBiADKAkaNgoUUmVuYW1lZFNlcnZpY2VzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARo3ChVSZW5hbWVkUmVzb3VyY2VzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJCCgxSdWJ5U2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzIr8BCgpHb1NldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxJFChByZW5hbWVkX3NlcnZpY2VzGAIgAygLMisuZ29vZ2xlLmFwaS5Hb1NldHRpbmdzLlJlbmFtZWRTZXJ2aWNlc0VudHJ5GjYKFFJlbmFtZWRTZXJ2aWNlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEizwIKDk1ldGhvZFNldHRpbmdzEhAKCHNlbGVjdG9yGAEgASgJEjwKDGxvbmdfcnVubmluZxgCIAEoCzImLmdvb2dsZS5hcGkuTWV0aG9kU2V0dGluZ3MuTG9uZ1J1bm5pbmcSHQoVYXV0b19wb3B1bGF0ZWRfZmllbGRzGAMgAygJGs0BCgtMb25nUnVubmluZxI1ChJpbml0aWFsX3BvbGxfZGVsYXkYASABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb24SHQoVcG9sbF9kZWxheV9tdWx0aXBsaWVyGAIgASgCEjEKDm1heF9wb2xsX2RlbGF5GAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEjUKEnRvdGFsX3BvbGxfdGltZW91dBgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiJRChhTZWxlY3RpdmVHYXBpY0dlbmVyYXRpb24SDwoHbWV0aG9kcxgBIAMoCRIkChxnZW5lcmF0ZV9vbWl0dGVkX2FzX2ludGVybmFsGAIgASgIKqMBChlDbGllbnRMaWJyYXJ5T3JnYW5pemF0aW9uEisKJ0NMSUVOVF9MSUJSQVJZX09SR0FOSVpBVElPTl9VTlNQRUNJRklFRBAAEgkKBUNMT1VEEAESBwoDQURTEAISCgoGUEhPVE9TEAMSDwoLU1RSRUVUX1ZJRVcQBBIMCghTSE9QUElORxAFEgcKA0dFTxAGEhEKDUdFTkVSQVRJVkVfQUkQBypnChhDbGllbnRMaWJyYXJ5RGVzdGluYXRpb24SKgomQ0xJRU5UX0xJQlJBUllfREVTVElOQVRJT05fVU5TUEVDSUZJRUQQABIKCgZHSVRIVUIQChITCg9QQUNLQUdFX01BTkFHRVIQFDpKChBtZXRob2Rfc2lnbmF0dXJlEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYmwggAygJUg9tZXRob2RTaWduYXR1cmU6QwoMZGVmYXVsdF9ob3N0Eh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zGJkIIAEoCVILZGVmYXVsdEhvc3Q6QwoMb2F1dGhfc2NvcGVzEh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zGJoIIAEoCVILb2F1dGhTY29wZXM6RAoLYXBpX3ZlcnNpb24SHy5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMYwbqr+gEgASgJUgphcGlWZXJzaW9uQqkBCg5jb20uZ29vZ2xlLmFwaUILQ2xpZW50UHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnOiAgNHQViqAgpHb29nbGUuQXBpygIKR29vZ2xlXEFwaeICFkdvb2dsZVxBcGlcR1BCTWV0YWRhdGHqAgtHb29nbGU6OkFwaWIGcHJvdG8z\", [file_google_api_launch_stage, file_google_protobuf_descriptor, file_google_protobuf_duration]);\n\n/**\n * Required information for every language.\n *\n * @generated from message google.api.CommonLanguageSettings\n */\nexport type CommonLanguageSettings = Message<\"google.api.CommonLanguageSettings\"> & {\n /**\n * Link to automatically generated reference documentation. Example:\n * https://cloud.google.com/nodejs/docs/reference/asset/latest\n *\n * @generated from field: string reference_docs_uri = 1 [deprecated = true];\n * @deprecated\n */\n referenceDocsUri: string;\n\n /**\n * The destination where API teams want this client library to be published.\n *\n * @generated from field: repeated google.api.ClientLibraryDestination destinations = 2;\n */\n destinations: ClientLibraryDestination[];\n\n /**\n * Configuration for which RPCs should be generated in the GAPIC client.\n *\n * @generated from field: google.api.SelectiveGapicGeneration selective_gapic_generation = 3;\n */\n selectiveGapicGeneration?: SelectiveGapicGeneration;\n};\n\n/**\n * Describes the message google.api.CommonLanguageSettings.\n * Use `create(CommonLanguageSettingsSchema)` to create a new message.\n */\nexport const CommonLanguageSettingsSchema: GenMessage<CommonLanguageSettings> = /*@__PURE__*/\n messageDesc(file_google_api_client, 0);\n\n/**\n * Details about how and where to publish client libraries.\n *\n * @generated from message google.api.ClientLibrarySettings\n */\nexport type ClientLibrarySettings = Message<\"google.api.ClientLibrarySettings\"> & {\n /**\n * Version of the API to apply these settings to. This is the full protobuf\n * package for the API, ending in the version element.\n * Examples: \"google.cloud.speech.v1\" and \"google.spanner.admin.database.v1\".\n *\n * @generated from field: string version = 1;\n */\n version: string;\n\n /**\n * Launch stage of this version of the API.\n *\n * @generated from field: google.api.LaunchStage launch_stage = 2;\n */\n launchStage: LaunchStage;\n\n /**\n * When using transport=rest, the client request will encode enums as\n * numbers rather than strings.\n *\n * @generated from field: bool rest_numeric_enums = 3;\n */\n restNumericEnums: boolean;\n\n /**\n * Settings for legacy Java features, supported in the Service YAML.\n *\n * @generated from field: google.api.JavaSettings java_settings = 21;\n */\n javaSettings?: JavaSettings;\n\n /**\n * Settings for C++ client libraries.\n *\n * @generated from field: google.api.CppSettings cpp_settings = 22;\n */\n cppSettings?: CppSettings;\n\n /**\n * Settings for PHP client libraries.\n *\n * @generated from field: google.api.PhpSettings php_settings = 23;\n */\n phpSettings?: PhpSettings;\n\n /**\n * Settings for Python client libraries.\n *\n * @generated from field: google.api.PythonSettings python_settings = 24;\n */\n pythonSettings?: PythonSettings;\n\n /**\n * Settings for Node client libraries.\n *\n * @generated from field: google.api.NodeSettings node_settings = 25;\n */\n nodeSettings?: NodeSettings;\n\n /**\n * Settings for .NET client libraries.\n *\n * @generated from field: google.api.DotnetSettings dotnet_settings = 26;\n */\n dotnetSettings?: DotnetSettings;\n\n /**\n * Settings for Ruby client libraries.\n *\n * @generated from field: google.api.RubySettings ruby_settings = 27;\n */\n rubySettings?: RubySettings;\n\n /**\n * Settings for Go client libraries.\n *\n * @generated from field: google.api.GoSettings go_settings = 28;\n */\n goSettings?: GoSettings;\n};\n\n/**\n * Describes the message google.api.ClientLibrarySettings.\n * Use `create(ClientLibrarySettingsSchema)` to create a new message.\n */\nexport const ClientLibrarySettingsSchema: GenMessage<ClientLibrarySettings> = /*@__PURE__*/\n messageDesc(file_google_api_client, 1);\n\n/**\n * This message configures the settings for publishing [Google Cloud Client\n * libraries](https://cloud.google.com/apis/docs/cloud-client-libraries)\n * generated from the service config.\n *\n * @generated from message google.api.Publishing\n */\nexport type Publishing = Message<\"google.api.Publishing\"> & {\n /**\n * A list of API method settings, e.g. the behavior for methods that use the\n * long-running operation pattern.\n *\n * @generated from field: repeated google.api.MethodSettings method_settings = 2;\n */\n methodSettings: MethodSettings[];\n\n /**\n * Link to a *public* URI where users can report issues. Example:\n * https://issuetracker.google.com/issues/new?component=190865&template=1161103\n *\n * @generated from field: string new_issue_uri = 101;\n */\n newIssueUri: string;\n\n /**\n * Link to product home page. Example:\n * https://cloud.google.com/asset-inventory/docs/overview\n *\n * @generated from field: string documentation_uri = 102;\n */\n documentationUri: string;\n\n /**\n * Used as a tracking tag when collecting data about the APIs developer\n * relations artifacts like docs, packages delivered to package managers,\n * etc. Example: \"speech\".\n *\n * @generated from field: string api_short_name = 103;\n */\n apiShortName: string;\n\n /**\n * GitHub label to apply to issues and pull requests opened for this API.\n *\n * @generated from field: string github_label = 104;\n */\n githubLabel: string;\n\n /**\n * GitHub teams to be added to CODEOWNERS in the directory in GitHub\n * containing source code for the client libraries for this API.\n *\n * @generated from field: repeated string codeowner_github_teams = 105;\n */\n codeownerGithubTeams: string[];\n\n /**\n * A prefix used in sample code when demarking regions to be included in\n * documentation.\n *\n * @generated from field: string doc_tag_prefix = 106;\n */\n docTagPrefix: string;\n\n /**\n * For whom the client library is being published.\n *\n * @generated from field: google.api.ClientLibraryOrganization organization = 107;\n */\n organization: ClientLibraryOrganization;\n\n /**\n * Client library settings. If the same version string appears multiple\n * times in this list, then the last one wins. Settings from earlier\n * settings with the same version string are discarded.\n *\n * @generated from field: repeated google.api.ClientLibrarySettings library_settings = 109;\n */\n librarySettings: ClientLibrarySettings[];\n\n /**\n * Optional link to proto reference documentation. Example:\n * https://cloud.google.com/pubsub/lite/docs/reference/rpc\n *\n * @generated from field: string proto_reference_documentation_uri = 110;\n */\n protoReferenceDocumentationUri: string;\n\n /**\n * Optional link to REST reference documentation. Example:\n * https://cloud.google.com/pubsub/lite/docs/reference/rest\n *\n * @generated from field: string rest_reference_documentation_uri = 111;\n */\n restReferenceDocumentationUri: string;\n};\n\n/**\n * Describes the message google.api.Publishing.\n * Use `create(PublishingSchema)` to create a new message.\n */\nexport const PublishingSchema: GenMessage<Publishing> = /*@__PURE__*/\n messageDesc(file_google_api_client, 2);\n\n/**\n * Settings for Java client libraries.\n *\n * @generated from message google.api.JavaSettings\n */\nexport type JavaSettings = Message<\"google.api.JavaSettings\"> & {\n /**\n * The package name to use in Java. Clobbers the java_package option\n * set in the protobuf. This should be used **only** by APIs\n * who have already set the language_settings.java.package_name\" field\n * in gapic.yaml. API teams should use the protobuf java_package option\n * where possible.\n *\n * Example of a YAML configuration::\n *\n * publishing:\n * java_settings:\n * library_package: com.google.cloud.pubsub.v1\n *\n * @generated from field: string library_package = 1;\n */\n libraryPackage: string;\n\n /**\n * Configure the Java class name to use instead of the service's for its\n * corresponding generated GAPIC client. Keys are fully-qualified\n * service names as they appear in the protobuf (including the full\n * the language_settings.java.interface_names\" field in gapic.yaml. API\n * teams should otherwise use the service name as it appears in the\n * protobuf.\n *\n * Example of a YAML configuration::\n *\n * publishing:\n * java_settings:\n * service_class_names:\n * - google.pubsub.v1.Publisher: TopicAdmin\n * - google.pubsub.v1.Subscriber: SubscriptionAdmin\n *\n * @generated from field: map<string, string> service_class_names = 2;\n */\n serviceClassNames: { [key: string]: string };\n\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 3;\n */\n common?: CommonLanguageSettings;\n};\n\n/**\n * Describes the message google.api.JavaSettings.\n * Use `create(JavaSettingsSchema)` to create a new message.\n */\nexport const JavaSettingsSchema: GenMessage<JavaSettings> = /*@__PURE__*/\n messageDesc(file_google_api_client, 3);\n\n/**\n * Settings for C++ client libraries.\n *\n * @generated from message google.api.CppSettings\n */\nexport type CppSettings = Message<\"google.api.CppSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n};\n\n/**\n * Describes the message google.api.CppSettings.\n * Use `create(CppSettingsSchema)` to create a new message.\n */\nexport const CppSettingsSchema: GenMessage<CppSettings> = /*@__PURE__*/\n messageDesc(file_google_api_client, 4);\n\n/**\n * Settings for Php client libraries.\n *\n * @generated from message google.api.PhpSettings\n */\nexport type PhpSettings = Message<\"google.api.PhpSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n};\n\n/**\n * Describes the message google.api.PhpSettings.\n * Use `create(PhpSettingsSchema)` to create a new message.\n */\nexport const PhpSettingsSchema: GenMessage<PhpSettings> = /*@__PURE__*/\n messageDesc(file_google_api_client, 5);\n\n/**\n * Settings for Python client libraries.\n *\n * @generated from message google.api.PythonSettings\n */\nexport type PythonSettings = Message<\"google.api.PythonSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n\n /**\n * Experimental features to be included during client library generation.\n *\n * @generated from field: google.api.PythonSettings.ExperimentalFeatures experimental_features = 2;\n */\n experimentalFeatures?: PythonSettings_ExperimentalFeatures;\n};\n\n/**\n * Describes the message google.api.PythonSettings.\n * Use `create(PythonSettingsSchema)` to create a new message.\n */\nexport const PythonSettingsSchema: GenMessage<PythonSettings> = /*@__PURE__*/\n messageDesc(file_google_api_client, 6);\n\n/**\n * Experimental features to be included during client library generation.\n * These fields will be deprecated once the feature graduates and is enabled\n * by default.\n *\n * @generated from message google.api.PythonSettings.ExperimentalFeatures\n */\nexport type PythonSettings_ExperimentalFeatures = Message<\"google.api.PythonSettings.ExperimentalFeatures\"> & {\n /**\n * Enables generation of asynchronous REST clients if `rest` transport is\n * enabled. By default, asynchronous REST clients will not be generated.\n * This feature will be enabled by default 1 month after launching the\n * feature in preview packages.\n *\n * @generated from field: bool rest_async_io_enabled = 1;\n */\n restAsyncIoEnabled: boolean;\n\n /**\n * Enables generation of protobuf code using new types that are more\n * Pythonic which are included in `protobuf>=5.29.x`. This feature will be\n * enabled by default 1 month after launching the feature in preview\n * packages.\n *\n * @generated from field: bool protobuf_pythonic_types_enabled = 2;\n */\n protobufPythonicTypesEnabled: boolean;\n\n /**\n * Disables generation of an unversioned Python package for this client\n * library. This means that the module names will need to be versioned in\n * import statements. For example `import google.cloud.library_v2` instead\n * of `import google.cloud.library`.\n *\n * @generated from field: bool unversioned_package_disabled = 3;\n */\n unversionedPackageDisabled: boolean;\n};\n\n/**\n * Describes the message google.api.PythonSettings.ExperimentalFeatures.\n * Use `create(PythonSettings_ExperimentalFeaturesSchema)` to create a new message.\n */\nexport const PythonSettings_ExperimentalFeaturesSchema: GenMessage<PythonSettings_ExperimentalFeatures> = /*@__PURE__*/\n messageDesc(file_google_api_client, 6, 0);\n\n/**\n * Settings for Node client libraries.\n *\n * @generated from message google.api.NodeSettings\n */\nexport type NodeSettings = Message<\"google.api.NodeSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n};\n\n/**\n * Describes the message google.api.NodeSettings.\n * Use `create(NodeSettingsSchema)` to create a new message.\n */\nexport const NodeSettingsSchema: GenMessage<NodeSettings> = /*@__PURE__*/\n messageDesc(file_google_api_client, 7);\n\n/**\n * Settings for Dotnet client libraries.\n *\n * @generated from message google.api.DotnetSettings\n */\nexport type DotnetSettings = Message<\"google.api.DotnetSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n\n /**\n * Map from original service names to renamed versions.\n * This is used when the default generated types\n * would cause a naming conflict. (Neither name is\n * fully-qualified.)\n * Example: Subscriber to SubscriberServiceApi.\n *\n * @generated from field: map<string, string> renamed_services = 2;\n */\n renamedServices: { [key: string]: string };\n\n /**\n * Map from full resource types to the effective short name\n * for the resource. This is used when otherwise resource\n * named from different services would cause naming collisions.\n * Example entry:\n * \"datalabeling.googleapis.com/Dataset\": \"DataLabelingDataset\"\n *\n * @generated from field: map<string, string> renamed_resources = 3;\n */\n renamedResources: { [key: string]: string };\n\n /**\n * List of full resource types to ignore during generation.\n * This is typically used for API-specific Location resources,\n * which should be handled by the generator as if they were actually\n * the common Location resources.\n * Example entry: \"documentai.googleapis.com/Location\"\n *\n * @generated from field: repeated string ignored_resources = 4;\n */\n ignoredResources: string[];\n\n /**\n * Namespaces which must be aliased in snippets due to\n * a known (but non-generator-predictable) naming collision\n *\n * @generated from field: repeated string forced_namespace_aliases = 5;\n */\n forcedNamespaceAliases: string[];\n\n /**\n * Method signatures (in the form \"service.method(signature)\")\n * which are provided separately, so shouldn't be generated.\n * Snippets *calling* these methods are still generated, however.\n *\n * @generated from field: repeated string handwritten_signatures = 6;\n */\n handwrittenSignatures: string[];\n};\n\n/**\n * Describes the message google.api.DotnetSettings.\n * Use `create(DotnetSettingsSchema)` to create a new message.\n */\nexport const DotnetSettingsSchema: GenMessage<DotnetSettings> = /*@__PURE__*/\n messageDesc(file_google_api_client, 8);\n\n/**\n * Settings for Ruby client libraries.\n *\n * @generated from message google.api.RubySettings\n */\nexport type RubySettings = Message<\"google.api.RubySettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n};\n\n/**\n * Describes the message google.api.RubySettings.\n * Use `create(RubySettingsSchema)` to create a new message.\n */\nexport const RubySettingsSchema: GenMessage<RubySettings> = /*@__PURE__*/\n messageDesc(file_google_api_client, 9);\n\n/**\n * Settings for Go client libraries.\n *\n * @generated from message google.api.GoSettings\n */\nexport type GoSettings = Message<\"google.api.GoSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n\n /**\n * Map of service names to renamed services. Keys are the package relative\n * service names and values are the name to be used for the service client\n * and call options.\n *\n * publishing:\n * go_settings:\n * renamed_services:\n * Publisher: TopicAdmin\n *\n * @generated from field: map<string, string> renamed_services = 2;\n */\n renamedServices: { [key: string]: string };\n};\n\n/**\n * Describes the message google.api.GoSettings.\n * Use `create(GoSettingsSchema)` to create a new message.\n */\nexport const GoSettingsSchema: GenMessage<GoSettings> = /*@__PURE__*/\n messageDesc(file_google_api_client, 10);\n\n/**\n * Describes the generator configuration for a method.\n *\n * @generated from message google.api.MethodSettings\n */\nexport type MethodSettings = Message<\"google.api.MethodSettings\"> & {\n /**\n * The fully qualified name of the method, for which the options below apply.\n * This is used to find the method to apply the options.\n *\n * Example:\n *\n * publishing:\n * method_settings:\n * - selector: google.storage.control.v2.StorageControl.CreateFolder\n * # method settings for CreateFolder...\n *\n * @generated from field: string selector = 1;\n */\n selector: string;\n\n /**\n * Describes settings to use for long-running operations when generating\n * API methods for RPCs. Complements RPCs that use the annotations in\n * google/longrunning/operations.proto.\n *\n * Example of a YAML configuration::\n *\n * publishing:\n * method_settings:\n * - selector: google.cloud.speech.v2.Speech.BatchRecognize\n * long_running:\n * initial_poll_delay: 60s # 1 minute\n * poll_delay_multiplier: 1.5\n * max_poll_delay: 360s # 6 minutes\n * total_poll_timeout: 54000s # 90 minutes\n *\n * @generated from field: google.api.MethodSettings.LongRunning long_running = 2;\n */\n longRunning?: MethodSettings_LongRunning;\n\n /**\n * List of top-level fields of the request message, that should be\n * automatically populated by the client libraries based on their\n * (google.api.field_info).format. Currently supported format: UUID4.\n *\n * Example of a YAML configuration:\n *\n * publishing:\n * method_settings:\n * - selector: google.example.v1.ExampleService.CreateExample\n * auto_populated_fields:\n * - request_id\n *\n * @generated from field: repeated string auto_populated_fields = 3;\n */\n autoPopulatedFields: string[];\n};\n\n/**\n * Describes the message google.api.MethodSettings.\n * Use `create(MethodSettingsSchema)` to create a new message.\n */\nexport const MethodSettingsSchema: GenMessage<MethodSettings> = /*@__PURE__*/\n messageDesc(file_google_api_client, 11);\n\n/**\n * Describes settings to use when generating API methods that use the\n * long-running operation pattern.\n * All default values below are from those used in the client library\n * generators (e.g.\n * [Java](https://github.com/googleapis/gapic-generator-java/blob/04c2faa191a9b5a10b92392fe8482279c4404803/src/main/java/com/google/api/generator/gapic/composer/common/RetrySettingsComposer.java)).\n *\n * @generated from message google.api.MethodSettings.LongRunning\n */\nexport type MethodSettings_LongRunning = Message<\"google.api.MethodSettings.LongRunning\"> & {\n /**\n * Initial delay after which the first poll request will be made.\n * Default value: 5 seconds.\n *\n * @generated from field: google.protobuf.Duration initial_poll_delay = 1;\n */\n initialPollDelay?: Duration;\n\n /**\n * Multiplier to gradually increase delay between subsequent polls until it\n * reaches max_poll_delay.\n * Default value: 1.5.\n *\n * @generated from field: float poll_delay_multiplier = 2;\n */\n pollDelayMultiplier: number;\n\n /**\n * Maximum time between two subsequent poll requests.\n * Default value: 45 seconds.\n *\n * @generated from field: google.protobuf.Duration max_poll_delay = 3;\n */\n maxPollDelay?: Duration;\n\n /**\n * Total polling timeout.\n * Default value: 5 minutes.\n *\n * @generated from field: google.protobuf.Duration total_poll_timeout = 4;\n */\n totalPollTimeout?: Duration;\n};\n\n/**\n * Describes the message google.api.MethodSettings.LongRunning.\n * Use `create(MethodSettings_LongRunningSchema)` to create a new message.\n */\nexport const MethodSettings_LongRunningSchema: GenMessage<MethodSettings_LongRunning> = /*@__PURE__*/\n messageDesc(file_google_api_client, 11, 0);\n\n/**\n * This message is used to configure the generation of a subset of the RPCs in\n * a service for client libraries.\n *\n * @generated from message google.api.SelectiveGapicGeneration\n */\nexport type SelectiveGapicGeneration = Message<\"google.api.SelectiveGapicGeneration\"> & {\n /**\n * An allowlist of the fully qualified names of RPCs that should be included\n * on public client surfaces.\n *\n * @generated from field: repeated string methods = 1;\n */\n methods: string[];\n\n /**\n * Setting this to true indicates to the client generators that methods\n * that would be excluded from the generation should instead be generated\n * in a way that indicates these methods should not be consumed by\n * end users. How this is expressed is up to individual language\n * implementations to decide. Some examples may be: added annotations,\n * obfuscated identifiers, or other language idiomatic patterns.\n *\n * @generated from field: bool generate_omitted_as_internal = 2;\n */\n generateOmittedAsInternal: boolean;\n};\n\n/**\n * Describes the message google.api.SelectiveGapicGeneration.\n * Use `create(SelectiveGapicGenerationSchema)` to create a new message.\n */\nexport const SelectiveGapicGenerationSchema: GenMessage<SelectiveGapicGeneration> = /*@__PURE__*/\n messageDesc(file_google_api_client, 12);\n\n/**\n * The organization for which the client libraries are being published.\n * Affects the url where generated docs are published, etc.\n *\n * @generated from enum google.api.ClientLibraryOrganization\n */\nexport enum ClientLibraryOrganization {\n /**\n * Not useful.\n *\n * @generated from enum value: CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED = 0;\n */\n CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED = 0,\n\n /**\n * Google Cloud Platform Org.\n *\n * @generated from enum value: CLOUD = 1;\n */\n CLOUD = 1,\n\n /**\n * Ads (Advertising) Org.\n *\n * @generated from enum value: ADS = 2;\n */\n ADS = 2,\n\n /**\n * Photos Org.\n *\n * @generated from enum value: PHOTOS = 3;\n */\n PHOTOS = 3,\n\n /**\n * Street View Org.\n *\n * @generated from enum value: STREET_VIEW = 4;\n */\n STREET_VIEW = 4,\n\n /**\n * Shopping Org.\n *\n * @generated from enum value: SHOPPING = 5;\n */\n SHOPPING = 5,\n\n /**\n * Geo Org.\n *\n * @generated from enum value: GEO = 6;\n */\n GEO = 6,\n\n /**\n * Generative AI - https://developers.generativeai.google\n *\n * @generated from enum value: GENERATIVE_AI = 7;\n */\n GENERATIVE_AI = 7,\n}\n\n/**\n * Describes the enum google.api.ClientLibraryOrganization.\n */\nexport const ClientLibraryOrganizationSchema: GenEnum<ClientLibraryOrganization> = /*@__PURE__*/\n enumDesc(file_google_api_client, 0);\n\n/**\n * To where should client libraries be published?\n *\n * @generated from enum google.api.ClientLibraryDestination\n */\nexport enum ClientLibraryDestination {\n /**\n * Client libraries will neither be generated nor published to package\n * managers.\n *\n * @generated from enum value: CLIENT_LIBRARY_DESTINATION_UNSPECIFIED = 0;\n */\n CLIENT_LIBRARY_DESTINATION_UNSPECIFIED = 0,\n\n /**\n * Generate the client library in a repo under github.com/googleapis,\n * but don't publish it to package managers.\n *\n * @generated from enum value: GITHUB = 10;\n */\n GITHUB = 10,\n\n /**\n * Publish the library to package managers like nuget.org and npmjs.com.\n *\n * @generated from enum value: PACKAGE_MANAGER = 20;\n */\n PACKAGE_MANAGER = 20,\n}\n\n/**\n * Describes the enum google.api.ClientLibraryDestination.\n */\nexport const ClientLibraryDestinationSchema: GenEnum<ClientLibraryDestination> = /*@__PURE__*/\n enumDesc(file_google_api_client, 1);\n\n/**\n * A definition of a client library method signature.\n *\n * In client libraries, each proto RPC corresponds to one or more methods\n * which the end user is able to call, and calls the underlying RPC.\n * Normally, this method receives a single argument (a struct or instance\n * corresponding to the RPC request object). Defining this field will\n * add one or more overloads providing flattened or simpler method signatures\n * in some languages.\n *\n * The fields on the method signature are provided as a comma-separated\n * string.\n *\n * For example, the proto RPC and annotation:\n *\n * rpc CreateSubscription(CreateSubscriptionRequest)\n * returns (Subscription) {\n * option (google.api.method_signature) = \"name,topic\";\n * }\n *\n * Would add the following Java overload (in addition to the method accepting\n * the request object):\n *\n * public final Subscription createSubscription(String name, String topic)\n *\n * The following backwards-compatibility guidelines apply:\n *\n * * Adding this annotation to an unannotated method is backwards\n * compatible.\n * * Adding this annotation to a method which already has existing\n * method signature annotations is backwards compatible if and only if\n * the new method signature annotation is last in the sequence.\n * * Modifying or removing an existing method signature annotation is\n * a breaking change.\n * * Re-ordering existing method signature annotations is a breaking\n * change.\n *\n * @generated from extension: repeated string method_signature = 1051;\n */\nexport const method_signature: GenExtension<MethodOptions, string[]> = /*@__PURE__*/\n extDesc(file_google_api_client, 0);\n\n/**\n * The hostname for this service.\n * This should be specified with no prefix or protocol.\n *\n * Example:\n *\n * service Foo {\n * option (google.api.default_host) = \"foo.googleapi.com\";\n * ...\n * }\n *\n * @generated from extension: string default_host = 1049;\n */\nexport const default_host: GenExtension<ServiceOptions, string> = /*@__PURE__*/\n extDesc(file_google_api_client, 1);\n\n/**\n * OAuth scopes needed for the client.\n *\n * Example:\n *\n * service Foo {\n * option (google.api.oauth_scopes) = \\\n * \"https://www.googleapis.com/auth/cloud-platform\";\n * ...\n * }\n *\n * If there is more than one scope, use a comma-separated string:\n *\n * Example:\n *\n * service Foo {\n * option (google.api.oauth_scopes) = \\\n * \"https://www.googleapis.com/auth/cloud-platform,\"\n * \"https://www.googleapis.com/auth/monitoring\";\n * ...\n * }\n *\n * @generated from extension: string oauth_scopes = 1050;\n */\nexport const oauth_scopes: GenExtension<ServiceOptions, string> = /*@__PURE__*/\n extDesc(file_google_api_client, 2);\n\n/**\n * The API version of this service, which should be sent by version-aware\n * clients to the service. This allows services to abide by the schema and\n * behavior of the service at the time this API version was deployed.\n * The format of the API version must be treated as opaque by clients.\n * Services may use a format with an apparent structure, but clients must\n * not rely on this to determine components within an API version, or attempt\n * to construct other valid API versions. Note that this is for upcoming\n * functionality and may not be implemented for all services.\n *\n * Example:\n *\n * service Foo {\n * option (google.api.api_version) = \"v1_20230821_preview\";\n * }\n *\n * @generated from extension: string api_version = 525000001;\n */\nexport const api_version: GenExtension<ServiceOptions, string> = /*@__PURE__*/\n extDesc(file_google_api_client, 3);\n\n","// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file thru/services/v1/command_service.proto (package thru.services.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenEnum, GenFile, GenMessage, GenService } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc, serviceDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_api_annotations } from \"../../../google/api/annotations_pb\";\nimport { file_google_api_client } from \"../../../google/api/client_pb\";\nimport type { Signature } from \"../../common/v1/primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport type { ConsensusStatus } from \"../../common/v1/consensus_pb\";\nimport { file_thru_common_v1_consensus } from \"../../common/v1/consensus_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { TransactionExecutionResult } from \"../../core/v1/transaction_pb\";\nimport { file_thru_core_v1_transaction } from \"../../core/v1/transaction_pb\";\nimport { file_thru_core_v1_types } from \"../../core/v1/types_pb\";\nimport type { Duration } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_duration } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/services/v1/command_service.proto.\n */\nexport const file_thru_services_v1_command_service: GenFile = /*@__PURE__*/\n fileDesc(\"CiZ0aHJ1L3NlcnZpY2VzL3YxL2NvbW1hbmRfc2VydmljZS5wcm90bxIQdGhydS5zZXJ2aWNlcy52MSI2ChZTZW5kVHJhbnNhY3Rpb25SZXF1ZXN0EhwKD3Jhd190cmFuc2FjdGlvbhgBIAEoDEID4EECIkwKF1NlbmRUcmFuc2FjdGlvblJlc3BvbnNlEjEKCXNpZ25hdHVyZRgBIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECIlIKHEJhdGNoU2VuZFRyYW5zYWN0aW9uc1JlcXVlc3QSHQoQcmF3X3RyYW5zYWN0aW9ucxgBIAMoDEID4EECEhMKC251bV9yZXRyaWVzGAIgASgFImoKHUJhdGNoU2VuZFRyYW5zYWN0aW9uc1Jlc3BvbnNlEjIKCnNpZ25hdHVyZXMYASADKAsyGS50aHJ1LmNvbW1vbi52MS5TaWduYXR1cmVCA+BBAhIVCghhY2NlcHRlZBgCIAMoCEID4EECIl4KFlNlbmRBbmRUcmFja1R4blJlcXVlc3QSGAoLdHJhbnNhY3Rpb24YASABKAxCA+BBAhIqCgd0aW1lb3V0GAIgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uIv8BChdTZW5kQW5kVHJhY2tUeG5SZXNwb25zZRI3CgZzdGF0dXMYASABKA4yIi50aHJ1LnNlcnZpY2VzLnYxLlN1Ym1pc3Npb25TdGF0dXNCA+BBAhIsCglzaWduYXR1cmUYAiABKAsyGS50aHJ1LmNvbW1vbi52MS5TaWduYXR1cmUSOQoQY29uc2Vuc3VzX3N0YXR1cxgDIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1cxJCChBleGVjdXRpb25fcmVzdWx0GAQgASgLMigudGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uRXhlY3V0aW9uUmVzdWx0KnUKEFN1Ym1pc3Npb25TdGF0dXMSIQodU1VCTUlTU0lPTl9TVEFUVVNfVU5TUEVDSUZJRUQQABIeChpTVUJNSVNTSU9OX1NUQVRVU19SRUNFSVZFRBABEh4KGlNVQk1JU1NJT05fU1RBVFVTX0FDQ0VQVEVEEAIy1wMKDkNvbW1hbmRTZXJ2aWNlEoMBCg9TZW5kVHJhbnNhY3Rpb24SKC50aHJ1LnNlcnZpY2VzLnYxLlNlbmRUcmFuc2FjdGlvblJlcXVlc3QaKS50aHJ1LnNlcnZpY2VzLnYxLlNlbmRUcmFuc2FjdGlvblJlc3BvbnNlIhuC0+STAhU6ASoiEC92MS90cmFuc2FjdGlvbnMSmwEKFUJhdGNoU2VuZFRyYW5zYWN0aW9ucxIuLnRocnUuc2VydmljZXMudjEuQmF0Y2hTZW5kVHJhbnNhY3Rpb25zUmVxdWVzdBovLnRocnUuc2VydmljZXMudjEuQmF0Y2hTZW5kVHJhbnNhY3Rpb25zUmVzcG9uc2UiIYLT5JMCGzoBKiIWL3YxL3RyYW5zYWN0aW9ucy9iYXRjaBKLAQoPU2VuZEFuZFRyYWNrVHhuEigudGhydS5zZXJ2aWNlcy52MS5TZW5kQW5kVHJhY2tUeG5SZXF1ZXN0GikudGhydS5zZXJ2aWNlcy52MS5TZW5kQW5kVHJhY2tUeG5SZXNwb25zZSIhgtPkkwIbOgEqIhYvdjEvdHJhbnNhY3Rpb25zL3RyYWNrMAEaE8pBEGFwaS50aHJ1Lm5ldHdvcmtC3gEKFGNvbS50aHJ1LnNlcnZpY2VzLnYxQhNDb21tYW5kU2VydmljZVByb3RvUAFaSGdpdGh1Yi5jb20vVW50by1MYWJzL3RocnUtbmV0L2dycGMvcGtnL3Byb3RvL3RocnUvc2VydmljZXMvdjE7c2VydmljZXN2MaICA1RTWKoCEFRocnUuU2VydmljZXMuVjG6AgRUSFVTygIQVGhydVxTZXJ2aWNlc1xWMeICHFRocnVcU2VydmljZXNcVjFcR1BCTWV0YWRhdGHqAhJUaHJ1OjpTZXJ2aWNlczo6VjFiBnByb3RvMw\", [file_google_api_annotations, file_google_api_client, file_thru_common_v1_primitives, file_thru_common_v1_consensus, file_google_api_field_behavior, file_thru_core_v1_transaction, file_thru_core_v1_types, file_google_protobuf_duration]);\n\n/**\n * SendTransactionRequest submits a transaction to the cluster.\n *\n * @generated from message thru.services.v1.SendTransactionRequest\n */\nexport type SendTransactionRequest = Message<\"thru.services.v1.SendTransactionRequest\"> & {\n /**\n * Raw transaction bytes encoded according to chain specification.\n *\n * @generated from field: bytes raw_transaction = 1;\n */\n rawTransaction: Uint8Array;\n};\n\n/**\n * Describes the message thru.services.v1.SendTransactionRequest.\n * Use `create(SendTransactionRequestSchema)` to create a new message.\n */\nexport const SendTransactionRequestSchema: GenMessage<SendTransactionRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_command_service, 0);\n\n/**\n * SendTransactionResponse echoes submission metadata.\n *\n * @generated from message thru.services.v1.SendTransactionResponse\n */\nexport type SendTransactionResponse = Message<\"thru.services.v1.SendTransactionResponse\"> & {\n /**\n * @generated from field: thru.common.v1.Signature signature = 1;\n */\n signature?: Signature;\n};\n\n/**\n * Describes the message thru.services.v1.SendTransactionResponse.\n * Use `create(SendTransactionResponseSchema)` to create a new message.\n */\nexport const SendTransactionResponseSchema: GenMessage<SendTransactionResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_command_service, 1);\n\n/**\n * BatchSendTransactionsRequest submits multiple transactions to the cluster.\n *\n * @generated from message thru.services.v1.BatchSendTransactionsRequest\n */\nexport type BatchSendTransactionsRequest = Message<\"thru.services.v1.BatchSendTransactionsRequest\"> & {\n /**\n * List of raw transaction bytes encoded according to chain specification.\n *\n * @generated from field: repeated bytes raw_transactions = 1;\n */\n rawTransactions: Uint8Array[];\n\n /**\n * Number of retries for each transaction if not accepted by UDS (defaults to 0).\n *\n * @generated from field: int32 num_retries = 2;\n */\n numRetries: number;\n};\n\n/**\n * Describes the message thru.services.v1.BatchSendTransactionsRequest.\n * Use `create(BatchSendTransactionsRequestSchema)` to create a new message.\n */\nexport const BatchSendTransactionsRequestSchema: GenMessage<BatchSendTransactionsRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_command_service, 2);\n\n/**\n * BatchSendTransactionsResponse returns submission results for each transaction.\n *\n * @generated from message thru.services.v1.BatchSendTransactionsResponse\n */\nexport type BatchSendTransactionsResponse = Message<\"thru.services.v1.BatchSendTransactionsResponse\"> & {\n /**\n * Signatures for each transaction (in same order as request).\n *\n * @generated from field: repeated thru.common.v1.Signature signatures = 1;\n */\n signatures: Signature[];\n\n /**\n * Acceptance status for each transaction (true if accepted, false if not).\n *\n * @generated from field: repeated bool accepted = 2;\n */\n accepted: boolean[];\n};\n\n/**\n * Describes the message thru.services.v1.BatchSendTransactionsResponse.\n * Use `create(BatchSendTransactionsResponseSchema)` to create a new message.\n */\nexport const BatchSendTransactionsResponseSchema: GenMessage<BatchSendTransactionsResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_command_service, 3);\n\n/**\n * SendAndTrackTxnRequest submits a transaction and tracks its execution.\n *\n * @generated from message thru.services.v1.SendAndTrackTxnRequest\n */\nexport type SendAndTrackTxnRequest = Message<\"thru.services.v1.SendAndTrackTxnRequest\"> & {\n /**\n * Raw transaction bytes encoded according to chain specification.\n *\n * @generated from field: bytes transaction = 1;\n */\n transaction: Uint8Array;\n\n /**\n * Optional timeout for tracking the transaction execution.\n * If not specified, the stream will remain open until the transaction is executed or the client cancels.\n *\n * @generated from field: google.protobuf.Duration timeout = 2;\n */\n timeout?: Duration;\n};\n\n/**\n * Describes the message thru.services.v1.SendAndTrackTxnRequest.\n * Use `create(SendAndTrackTxnRequestSchema)` to create a new message.\n */\nexport const SendAndTrackTxnRequestSchema: GenMessage<SendAndTrackTxnRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_command_service, 4);\n\n/**\n * SendAndTrackTxnResponse streams transaction status updates.\n *\n * @generated from message thru.services.v1.SendAndTrackTxnResponse\n */\nexport type SendAndTrackTxnResponse = Message<\"thru.services.v1.SendAndTrackTxnResponse\"> & {\n /**\n * Current submission status of the transaction.\n *\n * @generated from field: thru.services.v1.SubmissionStatus status = 1;\n */\n status: SubmissionStatus;\n\n /**\n * Transaction signature (populated for tracking messages).\n *\n * @generated from field: thru.common.v1.Signature signature = 2;\n */\n signature?: Signature;\n\n /**\n * Consensus status (populated for tracking messages).\n *\n * @generated from field: thru.common.v1.ConsensusStatus consensus_status = 3;\n */\n consensusStatus: ConsensusStatus;\n\n /**\n * Execution result (populated for tracking messages when execution completes).\n *\n * @generated from field: thru.core.v1.TransactionExecutionResult execution_result = 4;\n */\n executionResult?: TransactionExecutionResult;\n};\n\n/**\n * Describes the message thru.services.v1.SendAndTrackTxnResponse.\n * Use `create(SendAndTrackTxnResponseSchema)` to create a new message.\n */\nexport const SendAndTrackTxnResponseSchema: GenMessage<SendAndTrackTxnResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_command_service, 5);\n\n/**\n * SubmissionStatus represents the status of a transaction in the submission pipeline.\n *\n * @generated from enum thru.services.v1.SubmissionStatus\n */\nexport enum SubmissionStatus {\n /**\n * Submission status is unspecified (default value).\n *\n * @generated from enum value: SUBMISSION_STATUS_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * Transaction has been received by the gRPC server.\n *\n * @generated from enum value: SUBMISSION_STATUS_RECEIVED = 1;\n */\n RECEIVED = 1,\n\n /**\n * Transaction has been accepted by the forwarder via UDS.\n *\n * @generated from enum value: SUBMISSION_STATUS_ACCEPTED = 2;\n */\n ACCEPTED = 2,\n}\n\n/**\n * Describes the enum thru.services.v1.SubmissionStatus.\n */\nexport const SubmissionStatusSchema: GenEnum<SubmissionStatus> = /*@__PURE__*/\n enumDesc(file_thru_services_v1_command_service, 0);\n\n/**\n * CommandService defines transactional RPCs that mutate state or perform\n * expensive computations.\n *\n * @generated from service thru.services.v1.CommandService\n */\nexport const CommandService: GenService<{\n /**\n * Submit a new transaction to the cluster.\n *\n * @generated from rpc thru.services.v1.CommandService.SendTransaction\n */\n sendTransaction: {\n methodKind: \"unary\";\n input: typeof SendTransactionRequestSchema;\n output: typeof SendTransactionResponseSchema;\n },\n /**\n * Submit multiple transactions to the cluster in batch.\n *\n * @generated from rpc thru.services.v1.CommandService.BatchSendTransactions\n */\n batchSendTransactions: {\n methodKind: \"unary\";\n input: typeof BatchSendTransactionsRequestSchema;\n output: typeof BatchSendTransactionsResponseSchema;\n },\n /**\n * Submit a transaction and track its execution status.\n * Returns a stream of status updates starting with RECEIVED, then ACCEPTED,\n * followed by consensus and execution updates, closing after the transaction is executed.\n *\n * @generated from rpc thru.services.v1.CommandService.SendAndTrackTxn\n */\n sendAndTrackTxn: {\n methodKind: \"server_streaming\";\n input: typeof SendAndTrackTxnRequestSchema;\n output: typeof SendAndTrackTxnResponseSchema;\n },\n}> = /*@__PURE__*/\n serviceDesc(file_thru_services_v1_command_service, 0);\n\n","// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file thru/services/v1/query_service.proto (package thru.services.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenFile, GenMessage, GenService } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc, serviceDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_annotations } from \"../../../google/api/annotations_pb\";\nimport { file_google_api_client } from \"../../../google/api/client_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { ConsensusStatus, VersionContext } from \"../../common/v1/consensus_pb\";\nimport { file_thru_common_v1_consensus } from \"../../common/v1/consensus_pb\";\nimport type { Filter } from \"../../common/v1/filters_pb\";\nimport { file_thru_common_v1_filters } from \"../../common/v1/filters_pb\";\nimport type { PageRequest, PageResponse } from \"../../common/v1/pagination_pb\";\nimport { file_thru_common_v1_pagination } from \"../../common/v1/pagination_pb\";\nimport type { Pubkey, Signature } from \"../../common/v1/primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport type { Account, AccountSchema, AccountView, DataSlice, RawAccountSchema } from \"../../core/v1/account_pb\";\nimport { file_thru_core_v1_account } from \"../../core/v1/account_pb\";\nimport type { Block, BlockSchema, BlockView, RawBlockSchema } from \"../../core/v1/block_pb\";\nimport { file_thru_core_v1_block } from \"../../core/v1/block_pb\";\nimport type { StateProof, StateProofRequest } from \"../../core/v1/state_pb\";\nimport { file_thru_core_v1_state } from \"../../core/v1/state_pb\";\nimport type { RawTransactionSchema, Transaction, TransactionExecutionResult, TransactionSchema, TransactionView } from \"../../core/v1/transaction_pb\";\nimport { file_thru_core_v1_transaction } from \"../../core/v1/transaction_pb\";\nimport type { BlockHash } from \"../../core/v1/types_pb\";\nimport { file_thru_core_v1_types } from \"../../core/v1/types_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/services/v1/query_service.proto.\n */\nexport const file_thru_services_v1_query_service: GenFile = /*@__PURE__*/\n fileDesc(\"CiR0aHJ1L3NlcnZpY2VzL3YxL3F1ZXJ5X3NlcnZpY2UucHJvdG8SEHRocnUuc2VydmljZXMudjEi1QIKEUdldEFjY291bnRSZXF1ZXN0EiwKB2FkZHJlc3MYASABKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBAhIxCgR2aWV3GAIgASgOMhkudGhydS5jb3JlLnYxLkFjY291bnRWaWV3QgPgQQFIAIgBARI8Cg92ZXJzaW9uX2NvbnRleHQYAyABKAsyHi50aHJ1LmNvbW1vbi52MS5WZXJzaW9uQ29udGV4dEID4EECEkAKDW1pbl9jb25zZW5zdXMYBCABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgBiAEBEjUKCmRhdGFfc2xpY2UYBSABKAsyFy50aHJ1LmNvcmUudjEuRGF0YVNsaWNlQgPgQQFIAogBAUIHCgVfdmlld0IQCg5fbWluX2NvbnNlbnN1c0INCgtfZGF0YV9zbGljZSKSAgoUR2V0UmF3QWNjb3VudFJlcXVlc3QSLAoHYWRkcmVzcxgBIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjEKBHZpZXcYAiABKA4yGS50aHJ1LmNvcmUudjEuQWNjb3VudFZpZXdCA+BBAUgAiAEBEjwKD3ZlcnNpb25fY29udGV4dBgDIAEoCzIeLnRocnUuY29tbW9uLnYxLlZlcnNpb25Db250ZXh0QgPgQQISQAoNbWluX2NvbnNlbnN1cxgEIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSAGIAQFCBwoFX3ZpZXdCEAoOX21pbl9jb25zZW5zdXMinAIKFUdldFRyYW5zYWN0aW9uUmVxdWVzdBIxCglzaWduYXR1cmUYASABKAsyGS50aHJ1LmNvbW1vbi52MS5TaWduYXR1cmVCA+BBAhI1CgR2aWV3GAIgASgOMh0udGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uVmlld0ID4EEBSACIAQESPAoPdmVyc2lvbl9jb250ZXh0GAMgASgLMh4udGhydS5jb21tb24udjEuVmVyc2lvbkNvbnRleHRCA+BBAhJACg1taW5fY29uc2Vuc3VzGAQgASgOMh8udGhydS5jb21tb24udjEuQ29uc2Vuc3VzU3RhdHVzQgPgQQFIAYgBAUIHCgVfdmlld0IQCg5fbWluX2NvbnNlbnN1cyLfAQoYR2V0UmF3VHJhbnNhY3Rpb25SZXF1ZXN0EjEKCXNpZ25hdHVyZRgBIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEjwKD3ZlcnNpb25fY29udGV4dBgCIAEoCzIeLnRocnUuY29tbW9uLnYxLlZlcnNpb25Db250ZXh0QgPgQQISQAoNbWluX2NvbnNlbnN1cxgDIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSACIAQFCEAoOX21pbl9jb25zZW5zdXMiUgoZR2VuZXJhdGVTdGF0ZVByb29mUmVxdWVzdBI1CgdyZXF1ZXN0GAEgASgLMh8udGhydS5jb3JlLnYxLlN0YXRlUHJvb2ZSZXF1ZXN0QgPgQQIiSgoaR2VuZXJhdGVTdGF0ZVByb29mUmVzcG9uc2USLAoFcHJvb2YYASABKAsyGC50aHJ1LmNvcmUudjEuU3RhdGVQcm9vZkID4EECIt4CCg9HZXRCbG9ja1JlcXVlc3QSEwoEc2xvdBgBIAEoBEID4EEBSAASMgoKYmxvY2tfaGFzaBgCIAEoCzIXLnRocnUuY29yZS52MS5CbG9ja0hhc2hCA+BBAUgAEi8KBHZpZXcYAyABKA4yFy50aHJ1LmNvcmUudjEuQmxvY2tWaWV3QgPgQQFIAYgBARJACg1taW5fY29uc2Vuc3VzGAQgASgOMh8udGhydS5jb21tb24udjEuQ29uc2Vuc3VzU3RhdHVzQgPgQQFIAogBATpoukhlGmMKEmJsb2NrX3NlbGVjdG9yX3NldBIlZWl0aGVyIHNsb3Qgb3IgYmxvY2tfaGFzaCBtdXN0IGJlIHNldBomaGFzKHRoaXMuc2xvdCkgfHwgaGFzKHRoaXMuYmxvY2tfaGFzaClCCgoIc2VsZWN0b3JCBwoFX3ZpZXdCEAoOX21pbl9jb25zZW5zdXMiqwIKEkdldFJhd0Jsb2NrUmVxdWVzdBITCgRzbG90GAEgASgEQgPgQQFIABIyCgpibG9ja19oYXNoGAIgASgLMhcudGhydS5jb3JlLnYxLkJsb2NrSGFzaEID4EEBSAASQAoNbWluX2NvbnNlbnN1cxgDIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSAGIAQE6bLpIaRpnChZyYXdfYmxvY2tfc2VsZWN0b3Jfc2V0EiVlaXRoZXIgc2xvdCBvciBibG9ja19oYXNoIG11c3QgYmUgc2V0GiZoYXModGhpcy5zbG90KSB8fCBoYXModGhpcy5ibG9ja19oYXNoKUIKCghzZWxlY3RvckIQCg5fbWluX2NvbnNlbnN1cyL3AgoTTGlzdEFjY291bnRzUmVxdWVzdBIxCgR2aWV3GAEgASgOMhkudGhydS5jb3JlLnYxLkFjY291bnRWaWV3QgPgQQFIAIgBARJBCg92ZXJzaW9uX2NvbnRleHQYAiABKAsyHi50aHJ1LmNvbW1vbi52MS5WZXJzaW9uQ29udGV4dEID4EEBSAGIAQESMAoGZmlsdGVyGAMgASgLMhYudGhydS5jb21tb24udjEuRmlsdGVyQgPgQQFIAogBARIzCgRwYWdlGAQgASgLMhsudGhydS5jb21tb24udjEuUGFnZVJlcXVlc3RCA+BBAUgDiAEBEkAKDW1pbl9jb25zZW5zdXMYBSABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgEiAEBQgcKBV92aWV3QhIKEF92ZXJzaW9uX2NvbnRleHRCCQoHX2ZpbHRlckIHCgVfcGFnZUIQCg5fbWluX2NvbnNlbnN1cyKDAQoUTGlzdEFjY291bnRzUmVzcG9uc2USLAoIYWNjb3VudHMYASADKAsyFS50aHJ1LmNvcmUudjEuQWNjb3VudEID4EEBEjQKBHBhZ2UYAiABKAsyHC50aHJ1LmNvbW1vbi52MS5QYWdlUmVzcG9uc2VCA+BBAUgAiAEBQgcKBV9wYWdlIpwCChFMaXN0QmxvY2tzUmVxdWVzdBIwCgZmaWx0ZXIYASABKAsyFi50aHJ1LmNvbW1vbi52MS5GaWx0ZXJCA+BBAUgAiAEBEjMKBHBhZ2UYAiABKAsyGy50aHJ1LmNvbW1vbi52MS5QYWdlUmVxdWVzdEID4EEBSAGIAQESLwoEdmlldxgDIAEoDjIXLnRocnUuY29yZS52MS5CbG9ja1ZpZXdCA+BBAUgCiAEBEkAKDW1pbl9jb25zZW5zdXMYBCABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgDiAEBQgkKB19maWx0ZXJCBwoFX3BhZ2VCBwoFX3ZpZXdCEAoOX21pbl9jb25zZW5zdXMifQoSTGlzdEJsb2Nrc1Jlc3BvbnNlEigKBmJsb2NrcxgBIAMoCzITLnRocnUuY29yZS52MS5CbG9ja0ID4EEBEjQKBHBhZ2UYAiABKAsyHC50aHJ1LmNvbW1vbi52MS5QYWdlUmVzcG9uc2VCA+BBAUgAiAEBQgcKBV9wYWdlIswBCiFMaXN0VHJhbnNhY3Rpb25zRm9yQWNjb3VudFJlcXVlc3QSLAoHYWNjb3VudBgBIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjMKBHBhZ2UYAiABKAsyGy50aHJ1LmNvbW1vbi52MS5QYWdlUmVxdWVzdEID4EEBSACIAQESMAoGZmlsdGVyGAMgASgLMhYudGhydS5jb21tb24udjEuRmlsdGVyQgPgQQFIAYgBAUIHCgVfcGFnZUIJCgdfZmlsdGVyIpkBCiJMaXN0VHJhbnNhY3Rpb25zRm9yQWNjb3VudFJlc3BvbnNlEjQKBHBhZ2UYASABKAsyHC50aHJ1LmNvbW1vbi52MS5QYWdlUmVzcG9uc2VCA+BBAUgAiAEBEjQKDHRyYW5zYWN0aW9ucxgCIAMoCzIZLnRocnUuY29yZS52MS5UcmFuc2FjdGlvbkID4EEBQgcKBV9wYWdlIhMKEUdldFZlcnNpb25SZXF1ZXN0IpABChJHZXRWZXJzaW9uUmVzcG9uc2USSQoIdmVyc2lvbnMYASADKAsyMi50aHJ1LnNlcnZpY2VzLnYxLkdldFZlcnNpb25SZXNwb25zZS5WZXJzaW9uc0VudHJ5QgPgQQIaLwoNVmVyc2lvbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIocBCg9HZXRFdmVudFJlcXVlc3QSHQoIZXZlbnRfaWQYASABKAlCC+BBArpIBXIDGIABEkEKD3ZlcnNpb25fY29udGV4dBgCIAEoCzIeLnRocnUuY29tbW9uLnYxLlZlcnNpb25Db250ZXh0QgPgQQFIAIgBAUISChBfdmVyc2lvbl9jb250ZXh0IqgECgVFdmVudBIVCghldmVudF9pZBgBIAEoCUID4EECEj0KFXRyYW5zYWN0aW9uX3NpZ25hdHVyZRgCIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEjEKB3Byb2dyYW0YAyABKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBAUgAiAEBEhkKB3BheWxvYWQYBCABKAxCA+BBAUgBiAEBEhYKBHNsb3QYBSABKARCA+BBAUgCiAEBEhoKCGNhbGxfaWR4GAYgASgNQgPgQQFIA4gBARIdCgtwcm9ncmFtX2lkeBgHIAEoDUID4EEBSASIAQESHgoMcGF5bG9hZF9zaXplGAggASgNQgPgQQFIBYgBARIeCgxibG9ja19vZmZzZXQYCSABKA1CA+BBAUgGiAEBEjcKCXRpbWVzdGFtcBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAUgHiAEBEjMKCWZlZV9wYXllchgLIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EEBSAiIAQFCCgoIX3Byb2dyYW1CCgoIX3BheWxvYWRCBwoFX3Nsb3RCCwoJX2NhbGxfaWR4Qg4KDF9wcm9ncmFtX2lkeEIPCg1fcGF5bG9hZF9zaXplQg8KDV9ibG9ja19vZmZzZXRCDAoKX3RpbWVzdGFtcEIMCgpfZmVlX3BheWVyIrkCChFMaXN0RXZlbnRzUmVxdWVzdBIwCgZmaWx0ZXIYASABKAsyFi50aHJ1LmNvbW1vbi52MS5GaWx0ZXJCA+BBAUgAiAEBEjMKBHBhZ2UYAiABKAsyGy50aHJ1LmNvbW1vbi52MS5QYWdlUmVxdWVzdEID4EEBSAGIAQESQQoPdmVyc2lvbl9jb250ZXh0GAMgASgLMh4udGhydS5jb21tb24udjEuVmVyc2lvbkNvbnRleHRCA+BBAUgCiAEBEkAKDW1pbl9jb25zZW5zdXMYBCABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgDiAEBQgkKB19maWx0ZXJCBwoFX3BhZ2VCEgoQX3ZlcnNpb25fY29udGV4dEIQCg5fbWluX2NvbnNlbnN1cyKBAQoSTGlzdEV2ZW50c1Jlc3BvbnNlEiwKBmV2ZW50cxgBIAMoCzIXLnRocnUuc2VydmljZXMudjEuRXZlbnRCA+BBARI0CgRwYWdlGAIgASgLMhwudGhydS5jb21tb24udjEuUGFnZVJlc3BvbnNlQgPgQQFIAIgBAUIHCgVfcGFnZSLyAgoXTGlzdFRyYW5zYWN0aW9uc1JlcXVlc3QSMAoGZmlsdGVyGAEgASgLMhYudGhydS5jb21tb24udjEuRmlsdGVyQgPgQQFIAIgBARIzCgRwYWdlGAIgASgLMhsudGhydS5jb21tb24udjEuUGFnZVJlcXVlc3RCA+BBAUgBiAEBEh8KDXJldHVybl9ldmVudHMYAyABKAhCA+BBAUgCiAEBEkEKD3ZlcnNpb25fY29udGV4dBgEIAEoCzIeLnRocnUuY29tbW9uLnYxLlZlcnNpb25Db250ZXh0QgPgQQFIA4gBARJACg1taW5fY29uc2Vuc3VzGAUgASgOMh8udGhydS5jb21tb24udjEuQ29uc2Vuc3VzU3RhdHVzQgPgQQFIBIgBAUIJCgdfZmlsdGVyQgcKBV9wYWdlQhAKDl9yZXR1cm5fZXZlbnRzQhIKEF92ZXJzaW9uX2NvbnRleHRCEAoOX21pbl9jb25zZW5zdXMijwEKGExpc3RUcmFuc2FjdGlvbnNSZXNwb25zZRI0Cgx0cmFuc2FjdGlvbnMYASADKAsyGS50aHJ1LmNvcmUudjEuVHJhbnNhY3Rpb25CA+BBARI0CgRwYWdlGAIgASgLMhwudGhydS5jb21tb24udjEuUGFnZVJlc3BvbnNlQgPgQQFIAIgBAUIHCgVfcGFnZSJQChtHZXRUcmFuc2FjdGlvblN0YXR1c1JlcXVlc3QSMQoJc2lnbmF0dXJlGAEgASgLMhkudGhydS5jb21tb24udjEuU2lnbmF0dXJlQgPgQQIigwIKEVRyYW5zYWN0aW9uU3RhdHVzEjEKCXNpZ25hdHVyZRgBIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEkMKEGNvbnNlbnN1c19zdGF0dXMYAiABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgAiAEBEkwKEGV4ZWN1dGlvbl9yZXN1bHQYAyABKAsyKC50aHJ1LmNvcmUudjEuVHJhbnNhY3Rpb25FeGVjdXRpb25SZXN1bHRCA+BBAUgBiAEBQhMKEV9jb25zZW5zdXNfc3RhdHVzQhMKEV9leGVjdXRpb25fcmVzdWx0IhIKEEdldEhlaWdodFJlcXVlc3QiaQoRR2V0SGVpZ2h0UmVzcG9uc2USFgoJZmluYWxpemVkGAEgASgEQgPgQQISHQoQbG9jYWxseV9leGVjdXRlZBgCIAEoBEID4EECEh0KEGNsdXN0ZXJfZXhlY3V0ZWQYAyABKARCA+BBAiI3ChRHZXRTdGF0ZVJvb3RzUmVxdWVzdBIWCgRzbG90GAEgASgEQgPgQQFIAIgBAUIHCgVfc2xvdCI8Cg5TdGF0ZVJvb3RFbnRyeRIRCgRzbG90GAEgASgEQgPgQQISFwoKc3RhdGVfcm9vdBgCIAEoDEID4EECIlMKFUdldFN0YXRlUm9vdHNSZXNwb25zZRI6CgtzdGF0ZV9yb290cxgBIAMoCzIgLnRocnUuc2VydmljZXMudjEuU3RhdGVSb290RW50cnlCA+BBAjKWEgoMUXVlcnlTZXJ2aWNlEmgKCUdldEhlaWdodBIiLnRocnUuc2VydmljZXMudjEuR2V0SGVpZ2h0UmVxdWVzdBojLnRocnUuc2VydmljZXMudjEuR2V0SGVpZ2h0UmVzcG9uc2UiEoLT5JMCDBIKL3YxL2hlaWdodBJ4CgpHZXRBY2NvdW50EiMudGhydS5zZXJ2aWNlcy52MS5HZXRBY2NvdW50UmVxdWVzdBoVLnRocnUuY29yZS52MS5BY2NvdW50Ii7aQQdhZGRyZXNzgtPkkwIeEhwvdjEvYWNjb3VudHMve2FkZHJlc3MudmFsdWV9EoUBCg1HZXRSYXdBY2NvdW50EiYudGhydS5zZXJ2aWNlcy52MS5HZXRSYXdBY2NvdW50UmVxdWVzdBoYLnRocnUuY29yZS52MS5SYXdBY2NvdW50IjLaQQdhZGRyZXNzgtPkkwIiEiAvdjEvYWNjb3VudHMve2FkZHJlc3MudmFsdWV9OnJhdxKMAQoOR2V0VHJhbnNhY3Rpb24SJy50aHJ1LnNlcnZpY2VzLnYxLkdldFRyYW5zYWN0aW9uUmVxdWVzdBoZLnRocnUuY29yZS52MS5UcmFuc2FjdGlvbiI22kEJc2lnbmF0dXJlgtPkkwIkEiIvdjEvdHJhbnNhY3Rpb25zL3tzaWduYXR1cmUudmFsdWV9EpkBChFHZXRSYXdUcmFuc2FjdGlvbhIqLnRocnUuc2VydmljZXMudjEuR2V0UmF3VHJhbnNhY3Rpb25SZXF1ZXN0GhwudGhydS5jb3JlLnYxLlJhd1RyYW5zYWN0aW9uIjraQQlzaWduYXR1cmWC0+STAigSJi92MS90cmFuc2FjdGlvbnMve3NpZ25hdHVyZS52YWx1ZX06cmF3EoYBCghHZXRCbG9jaxIhLnRocnUuc2VydmljZXMudjEuR2V0QmxvY2tSZXF1ZXN0GhMudGhydS5jb3JlLnYxLkJsb2NrIkKC0+STAjxaJxIlL3YxL2Jsb2Nrcy9ieS1oYXNoL3tibG9ja19oYXNoLnZhbHVlfRIRL3YxL2Jsb2Nrcy97c2xvdH0SlwEKC0dldFJhd0Jsb2NrEiQudGhydS5zZXJ2aWNlcy52MS5HZXRSYXdCbG9ja1JlcXVlc3QaFi50aHJ1LmNvcmUudjEuUmF3QmxvY2siSoLT5JMCRForEikvdjEvYmxvY2tzL2J5LWhhc2gve2Jsb2NrX2hhc2gudmFsdWV9OnJhdxIVL3YxL2Jsb2Nrcy97c2xvdH06cmF3EnMKDExpc3RBY2NvdW50cxIlLnRocnUuc2VydmljZXMudjEuTGlzdEFjY291bnRzUmVxdWVzdBomLnRocnUuc2VydmljZXMudjEuTGlzdEFjY291bnRzUmVzcG9uc2UiFILT5JMCDhIML3YxL2FjY291bnRzEmsKCkxpc3RCbG9ja3MSIy50aHJ1LnNlcnZpY2VzLnYxLkxpc3RCbG9ja3NSZXF1ZXN0GiQudGhydS5zZXJ2aWNlcy52MS5MaXN0QmxvY2tzUmVzcG9uc2UiEoLT5JMCDBIKL3YxL2Jsb2NrcxLEAQoaTGlzdFRyYW5zYWN0aW9uc0ZvckFjY291bnQSMy50aHJ1LnNlcnZpY2VzLnYxLkxpc3RUcmFuc2FjdGlvbnNGb3JBY2NvdW50UmVxdWVzdBo0LnRocnUuc2VydmljZXMudjEuTGlzdFRyYW5zYWN0aW9uc0ZvckFjY291bnRSZXNwb25zZSI72kEHYWNjb3VudILT5JMCKxIpL3YxL2FjY291bnRzL3thY2NvdW50LnZhbHVlfS90cmFuc2FjdGlvbnMScAoIR2V0RXZlbnQSIS50aHJ1LnNlcnZpY2VzLnYxLkdldEV2ZW50UmVxdWVzdBoXLnRocnUuc2VydmljZXMudjEuRXZlbnQiKNpBCGV2ZW50X2lkgtPkkwIXEhUvdjEvZXZlbnRzL3tldmVudF9pZH0SawoKTGlzdEV2ZW50cxIjLnRocnUuc2VydmljZXMudjEuTGlzdEV2ZW50c1JlcXVlc3QaJC50aHJ1LnNlcnZpY2VzLnYxLkxpc3RFdmVudHNSZXNwb25zZSISgtPkkwIMEgovdjEvZXZlbnRzEoMBChBMaXN0VHJhbnNhY3Rpb25zEikudGhydS5zZXJ2aWNlcy52MS5MaXN0VHJhbnNhY3Rpb25zUmVxdWVzdBoqLnRocnUuc2VydmljZXMudjEuTGlzdFRyYW5zYWN0aW9uc1Jlc3BvbnNlIhiC0+STAhISEC92MS90cmFuc2FjdGlvbnMSqQEKFEdldFRyYW5zYWN0aW9uU3RhdHVzEi0udGhydS5zZXJ2aWNlcy52MS5HZXRUcmFuc2FjdGlvblN0YXR1c1JlcXVlc3QaIy50aHJ1LnNlcnZpY2VzLnYxLlRyYW5zYWN0aW9uU3RhdHVzIj3aQQlzaWduYXR1cmWC0+STAisSKS92MS90cmFuc2FjdGlvbnMve3NpZ25hdHVyZS52YWx1ZX06c3RhdHVzEpQBChJHZW5lcmF0ZVN0YXRlUHJvb2YSKy50aHJ1LnNlcnZpY2VzLnYxLkdlbmVyYXRlU3RhdGVQcm9vZlJlcXVlc3QaLC50aHJ1LnNlcnZpY2VzLnYxLkdlbmVyYXRlU3RhdGVQcm9vZlJlc3BvbnNlIiOC0+STAh06ASoiGC92MS9zdGF0ZXByb29mczpnZW5lcmF0ZRJsCgpHZXRWZXJzaW9uEiMudGhydS5zZXJ2aWNlcy52MS5HZXRWZXJzaW9uUmVxdWVzdBokLnRocnUuc2VydmljZXMudjEuR2V0VmVyc2lvblJlc3BvbnNlIhOC0+STAg0SCy92MS92ZXJzaW9uEngKDUdldFN0YXRlUm9vdHMSJi50aHJ1LnNlcnZpY2VzLnYxLkdldFN0YXRlUm9vdHNSZXF1ZXN0GicudGhydS5zZXJ2aWNlcy52MS5HZXRTdGF0ZVJvb3RzUmVzcG9uc2UiFoLT5JMCEBIOL3YxL3N0YXRlcm9vdHMaE8pBEGFwaS50aHJ1Lm5ldHdvcmtC3AEKFGNvbS50aHJ1LnNlcnZpY2VzLnYxQhFRdWVyeVNlcnZpY2VQcm90b1ABWkhnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L3NlcnZpY2VzL3YxO3NlcnZpY2VzdjGiAgNUU1iqAhBUaHJ1LlNlcnZpY2VzLlYxugIEVEhVU8oCEFRocnVcU2VydmljZXNcVjHiAhxUaHJ1XFNlcnZpY2VzXFYxXEdQQk1ldGFkYXRh6gISVGhydTo6U2VydmljZXM6OlYxYgZwcm90bzM\", [file_buf_validate_validate, file_google_api_annotations, file_google_api_client, file_google_api_field_behavior, file_google_protobuf_timestamp, file_thru_common_v1_consensus, file_thru_common_v1_filters, file_thru_common_v1_pagination, file_thru_common_v1_primitives, file_thru_core_v1_account, file_thru_core_v1_block, file_thru_core_v1_state, file_thru_core_v1_transaction, file_thru_core_v1_types]);\n\n/**\n * GetAccountRequest retrieves a decoded account by public key.\n *\n * @generated from message thru.services.v1.GetAccountRequest\n */\nexport type GetAccountRequest = Message<\"thru.services.v1.GetAccountRequest\"> & {\n /**\n * @generated from field: thru.common.v1.Pubkey address = 1;\n */\n address?: Pubkey;\n\n /**\n * @generated from field: optional thru.core.v1.AccountView view = 2;\n */\n view?: AccountView;\n\n /**\n * @generated from field: thru.common.v1.VersionContext version_context = 3;\n */\n versionContext?: VersionContext;\n\n /**\n * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 4;\n */\n minConsensus?: ConsensusStatus;\n\n /**\n * @generated from field: optional thru.core.v1.DataSlice data_slice = 5;\n */\n dataSlice?: DataSlice;\n};\n\n/**\n * Describes the message thru.services.v1.GetAccountRequest.\n * Use `create(GetAccountRequestSchema)` to create a new message.\n */\nexport const GetAccountRequestSchema: GenMessage<GetAccountRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 0);\n\n/**\n * GetRawAccountRequest retrieves raw account bytes by public key.\n *\n * @generated from message thru.services.v1.GetRawAccountRequest\n */\nexport type GetRawAccountRequest = Message<\"thru.services.v1.GetRawAccountRequest\"> & {\n /**\n * @generated from field: thru.common.v1.Pubkey address = 1;\n */\n address?: Pubkey;\n\n /**\n * @generated from field: optional thru.core.v1.AccountView view = 2;\n */\n view?: AccountView;\n\n /**\n * @generated from field: thru.common.v1.VersionContext version_context = 3;\n */\n versionContext?: VersionContext;\n\n /**\n * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 4;\n */\n minConsensus?: ConsensusStatus;\n};\n\n/**\n * Describes the message thru.services.v1.GetRawAccountRequest.\n * Use `create(GetRawAccountRequestSchema)` to create a new message.\n */\nexport const GetRawAccountRequestSchema: GenMessage<GetRawAccountRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 1);\n\n/**\n * GetTransactionRequest retrieves a decoded transaction by signature.\n *\n * @generated from message thru.services.v1.GetTransactionRequest\n */\nexport type GetTransactionRequest = Message<\"thru.services.v1.GetTransactionRequest\"> & {\n /**\n * @generated from field: thru.common.v1.Signature signature = 1;\n */\n signature?: Signature;\n\n /**\n * @generated from field: optional thru.core.v1.TransactionView view = 2;\n */\n view?: TransactionView;\n\n /**\n * @generated from field: thru.common.v1.VersionContext version_context = 3;\n */\n versionContext?: VersionContext;\n\n /**\n * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 4;\n */\n minConsensus?: ConsensusStatus;\n};\n\n/**\n * Describes the message thru.services.v1.GetTransactionRequest.\n * Use `create(GetTransactionRequestSchema)` to create a new message.\n */\nexport const GetTransactionRequestSchema: GenMessage<GetTransactionRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 2);\n\n/**\n * GetRawTransactionRequest retrieves raw transaction bytes by signature.\n *\n * @generated from message thru.services.v1.GetRawTransactionRequest\n */\nexport type GetRawTransactionRequest = Message<\"thru.services.v1.GetRawTransactionRequest\"> & {\n /**\n * @generated from field: thru.common.v1.Signature signature = 1;\n */\n signature?: Signature;\n\n /**\n * @generated from field: thru.common.v1.VersionContext version_context = 2;\n */\n versionContext?: VersionContext;\n\n /**\n * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 3;\n */\n minConsensus?: ConsensusStatus;\n};\n\n/**\n * Describes the message thru.services.v1.GetRawTransactionRequest.\n * Use `create(GetRawTransactionRequestSchema)` to create a new message.\n */\nexport const GetRawTransactionRequestSchema: GenMessage<GetRawTransactionRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 3);\n\n/**\n * GenerateStateProofRequest requests an account state proof.\n *\n * @generated from message thru.services.v1.GenerateStateProofRequest\n */\nexport type GenerateStateProofRequest = Message<\"thru.services.v1.GenerateStateProofRequest\"> & {\n /**\n * @generated from field: thru.core.v1.StateProofRequest request = 1;\n */\n request?: StateProofRequest;\n};\n\n/**\n * Describes the message thru.services.v1.GenerateStateProofRequest.\n * Use `create(GenerateStateProofRequestSchema)` to create a new message.\n */\nexport const GenerateStateProofRequestSchema: GenMessage<GenerateStateProofRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 4);\n\n/**\n * GenerateStateProofResponse contains the generated proof.\n *\n * @generated from message thru.services.v1.GenerateStateProofResponse\n */\nexport type GenerateStateProofResponse = Message<\"thru.services.v1.GenerateStateProofResponse\"> & {\n /**\n * @generated from field: thru.core.v1.StateProof proof = 1;\n */\n proof?: StateProof;\n};\n\n/**\n * Describes the message thru.services.v1.GenerateStateProofResponse.\n * Use `create(GenerateStateProofResponseSchema)` to create a new message.\n */\nexport const GenerateStateProofResponseSchema: GenMessage<GenerateStateProofResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 5);\n\n/**\n * GetBlockRequest retrieves decoded block information by slot or hash.\n *\n * @generated from message thru.services.v1.GetBlockRequest\n */\nexport type GetBlockRequest = Message<\"thru.services.v1.GetBlockRequest\"> & {\n /**\n * @generated from oneof thru.services.v1.GetBlockRequest.selector\n */\n selector: {\n /**\n * @generated from field: uint64 slot = 1;\n */\n value: bigint;\n case: \"slot\";\n } | {\n /**\n * @generated from field: thru.core.v1.BlockHash block_hash = 2;\n */\n value: BlockHash;\n case: \"blockHash\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from field: optional thru.core.v1.BlockView view = 3;\n */\n view?: BlockView;\n\n /**\n * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 4;\n */\n minConsensus?: ConsensusStatus;\n};\n\n/**\n * Describes the message thru.services.v1.GetBlockRequest.\n * Use `create(GetBlockRequestSchema)` to create a new message.\n */\nexport const GetBlockRequestSchema: GenMessage<GetBlockRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 6);\n\n/**\n * GetRawBlockRequest retrieves raw block bytes by slot or hash.\n *\n * @generated from message thru.services.v1.GetRawBlockRequest\n */\nexport type GetRawBlockRequest = Message<\"thru.services.v1.GetRawBlockRequest\"> & {\n /**\n * @generated from oneof thru.services.v1.GetRawBlockRequest.selector\n */\n selector: {\n /**\n * @generated from field: uint64 slot = 1;\n */\n value: bigint;\n case: \"slot\";\n } | {\n /**\n * @generated from field: thru.core.v1.BlockHash block_hash = 2;\n */\n value: BlockHash;\n case: \"blockHash\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 3;\n */\n minConsensus?: ConsensusStatus;\n};\n\n/**\n * Describes the message thru.services.v1.GetRawBlockRequest.\n * Use `create(GetRawBlockRequestSchema)` to create a new message.\n */\nexport const GetRawBlockRequestSchema: GenMessage<GetRawBlockRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 7);\n\n/**\n * ListAccountsRequest lists accounts using CEL filters.\n *\n * The filter expression supports filtering on account metadata fields using CEL (Common Expression Language).\n * A filter expression is REQUIRED for all ListAccounts requests.\n *\n * Available fields for filtering:\n * - account.address.value (bytes): The account's public key address\n * - account.meta.owner.value (bytes): The account owner's public key\n * - account.meta.balance (uint64): Account balance in native units\n * - account.meta.seq (uint64): Account sequence number / state counter\n * - account.meta.nonce (uint64): Account transaction nonce\n * - account.meta.data_size (uint32): Size of account data in bytes\n * - account.meta.version (uint32): Account version number\n * - account.meta.flags (AccountFlags): Account capability flags (message type)\n * - account.meta.flags.is_program (bool): Flag indicating if account is a program\n * - account.meta.flags.is_privileged (bool): Flag indicating if account is privileged\n * - account.meta.flags.is_uncompressable (bool): Flag indicating if account data cannot be compressed\n * - account.meta.flags.is_ephemeral (bool): Flag indicating if account is ephemeral\n * - account.meta.flags.is_deleted (bool): Flag indicating if account is deleted\n * - account.meta.flags.is_new (bool): Flag indicating if account is new\n * - account.meta.flags.is_compressed (bool): Flag indicating if account data is compressed\n * - account.meta.last_updated_slot (uint64): Slot when account was last modified\n *\n * Available CEL functions:\n * - has(field): Check if optional field exists\n * - uint(value): Convert to uint type\n * - int(value): Convert to int type\n * - string(value): Convert to string type\n * - bytes(value): Convert to bytes type\n *\n * Available filter parameters (accessible via params.* in expressions):\n * - params.owner_bytes (bytes): Owner public key for owner filtering (REQUIRED when filtering by owner)\n * - params.prefix (bytes): Byte prefix for range-based filtering\n * - params.tag (any): Custom tag parameter\n * - params.min_slot (uint64): Minimum slot parameter\n * - params.min_updated_slot (uint64): Minimum last_updated_slot for filtering\n *\n * Filter examples:\n *\n * 1. Filter by balance:\n * filter.expression = \"account.meta.balance > uint(1000000)\"\n *\n * 2. Filter by balance range:\n * filter.expression = \"account.meta.balance >= uint(100) && account.meta.balance <= uint(10000)\"\n *\n * 3. Filter by owner (requires params.owner_bytes):\n * filter.expression = \"account.meta.owner.value == params.owner_bytes\"\n * filter.params[\"owner_bytes\"].bytes_value = <32-byte owner pubkey>\n *\n * 4. Filter by data size:\n * filter.expression = \"account.meta.data_size > uint(0)\"\n * filter.expression = \"account.meta.data_size >= uint(100) && account.meta.data_size <= uint(1000)\"\n *\n * 5. Filter by nonce:\n * filter.expression = \"account.meta.nonce == uint(0)\"\n *\n * 6. Filter by sequence number:\n * filter.expression = \"account.meta.seq >= uint(100)\"\n *\n * 7. Filter by version:\n * filter.expression = \"account.meta.version == uint(1)\"\n *\n * 8. Filter by specific address (using inline bytes literal with octal escaping):\n * filter.expression = \"account.address.value == b'\\001\\002\\003...'\"\n * Note: Binary bytes must be properly escaped using octal notation (\\NNN) for non-printable bytes\n *\n * 9. Filter by address prefix (using range comparison):\n * filter.expression = \"account.address.value >= b'\\001\\002\\003\\004' && account.address.value <= b'\\001\\002\\003\\004\\377\\377...'\"\n * Note: Create upper bound by appending 0xff bytes after prefix\n *\n * 10. Combine multiple conditions with AND:\n * filter.expression = \"account.meta.balance > uint(0) && account.meta.data_size == uint(0)\"\n *\n * 11. Combine multiple conditions with OR:\n * filter.expression = \"account.meta.balance == uint(0) || account.meta.balance > uint(50000)\"\n *\n * 12. Complex combined filters:\n * filter.expression = \"(account.meta.balance > uint(100) && account.meta.balance < uint(10000)) || account.meta.data_size > uint(1000)\"\n *\n * 13. Check for optional field existence:\n * filter.expression = \"has(account.address.value)\"\n * filter.expression = \"has(account.meta.owner.value)\" // Requires params.owner_bytes\n *\n * 14. Use inequality operators:\n * filter.expression = \"account.meta.balance < uint(5000)\"\n * filter.expression = \"account.meta.balance <= uint(5000)\"\n * filter.expression = \"account.meta.balance >= uint(100)\"\n * filter.expression = \"account.meta.balance != uint(999)\"\n *\n * 15. Type conversions:\n * filter.expression = \"account.meta.balance == uint(100)\"\n * filter.expression = \"uint(account.meta.data_size) > uint(0)\"\n *\n * 16. Filter by account flags (individual flag fields):\n * filter.expression = \"account.meta.flags.is_program == true\"\n * filter.expression = \"account.meta.flags.is_privileged == true\"\n * filter.expression = \"account.meta.flags.is_uncompressable == true\"\n * filter.expression = \"account.meta.flags.is_ephemeral == true\"\n * filter.expression = \"account.meta.flags.is_deleted == true\"\n * filter.expression = \"account.meta.flags.is_new == true\"\n * filter.expression = \"account.meta.flags.is_compressed == true\"\n *\n * 17. Combine flag filters with other conditions:\n * filter.expression = \"account.meta.flags.is_program == true && account.meta.balance > uint(0)\"\n *\n * 18. Filter by last_updated_slot:\n * filter.expression = \"account.meta.last_updated_slot >= uint(1000)\"\n *\n * 19. Filter by last_updated_slot with params:\n * filter.expression = \"account.meta.last_updated_slot >= params.min_updated_slot\"\n * filter.params[\"min_updated_slot\"].uint_value = 1000\n *\n * Limitations:\n * - The startsWith() function only works with strings, not bytes\n * - The bytesPrefix() function is NOT available for ListAccounts (use range comparison instead)\n * - Parameter names other than owner_bytes, prefix, tag, min_slot, min_updated_slot are NOT permitted\n * - All filters are pushed down to SQL for optimal performance where possible\n *\n * @generated from message thru.services.v1.ListAccountsRequest\n */\nexport type ListAccountsRequest = Message<\"thru.services.v1.ListAccountsRequest\"> & {\n /**\n * @generated from field: optional thru.core.v1.AccountView view = 1;\n */\n view?: AccountView;\n\n /**\n * @generated from field: optional thru.common.v1.VersionContext version_context = 2;\n */\n versionContext?: VersionContext;\n\n /**\n * CEL filter expression (REQUIRED). See message documentation for examples.\n *\n * @generated from field: optional thru.common.v1.Filter filter = 3;\n */\n filter?: Filter;\n\n /**\n * @generated from field: optional thru.common.v1.PageRequest page = 4;\n */\n page?: PageRequest;\n\n /**\n * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 5;\n */\n minConsensus?: ConsensusStatus;\n};\n\n/**\n * Describes the message thru.services.v1.ListAccountsRequest.\n * Use `create(ListAccountsRequestSchema)` to create a new message.\n */\nexport const ListAccountsRequestSchema: GenMessage<ListAccountsRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 8);\n\n/**\n * ListAccountsResponse contains paginated accounts.\n *\n * @generated from message thru.services.v1.ListAccountsResponse\n */\nexport type ListAccountsResponse = Message<\"thru.services.v1.ListAccountsResponse\"> & {\n /**\n * @generated from field: repeated thru.core.v1.Account accounts = 1;\n */\n accounts: Account[];\n\n /**\n * @generated from field: optional thru.common.v1.PageResponse page = 2;\n */\n page?: PageResponse;\n};\n\n/**\n * Describes the message thru.services.v1.ListAccountsResponse.\n * Use `create(ListAccountsResponseSchema)` to create a new message.\n */\nexport const ListAccountsResponseSchema: GenMessage<ListAccountsResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 9);\n\n/**\n * ListBlocksRequest lists blocks with pagination and filtering.\n *\n * Returns blocks ordered from latest slot to earliest (slot DESC) by default.\n * Supports filtering on block header and footer fields using CEL expressions.\n *\n * Available fields for filtering:\n *\n * Header fields:\n * - block.header.slot (uint64): Block slot number\n * - block.header.version (uint32): Block version number\n * - block.header.start_slot (uint64): Start slot for block production\n * - block.header.producer.value (bytes): Block producer's public key\n * - block.header.expiry_after (uint32): Expiry duration in slots\n * - block.header.expiry_timestamp (google.protobuf.Timestamp): Expiry timestamp\n * - block.header.max_block_size (uint32): Maximum block size in bytes\n * - block.header.max_compute_units (uint64): Maximum compute units allowed\n * - block.header.max_state_units (uint32): Maximum state units allowed\n * - block.header.bond_amount_lock_up (uint64): Bond amount lock-up for block production\n * - block.header.price (uint64): Block production price\n * - block.header.block_hash.value (bytes): Block hash\n * - block.header.header_signature.value (bytes): Header signature\n * - block.header.block_time (google.protobuf.Timestamp): Block timestamp\n *\n * Footer fields:\n * - block.footer.signature.value (bytes): Block signature\n * - block.footer.status (int32): Block execution status (2 = EXECUTION_STATUS_EXECUTED)\n * - block.footer.consumed_compute_units (uint64): Total compute units consumed by all transactions\n * - block.footer.consumed_state_units (uint32): Total state units consumed by all transactions\n * - block.footer.attestor_payment (uint64): Payment to attestors for block validation\n *\n * Consensus status:\n * - block.consensus_status (int32): Consensus status (always CONSENSUS_STATUS_INCLUDED for persisted blocks)\n *\n * Available CEL functions:\n * - has(field): Check if optional field exists\n * - uint(value): Convert to uint type\n * - int(value): Convert to int type\n * - bytes(value): Convert to bytes type\n * - timestamp(value): Convert to timestamp type\n * - duration(value): Convert to duration type\n *\n * Available filter parameters (accessible via params.* in expressions):\n * - params.slot (uint64): Slot number for filtering\n * - params.u64 (uint64): Generic uint64 parameter\n * - params.producer (bytes): Producer public key for filtering\n *\n * Filter examples:\n *\n * 1. Filter by specific slot:\n * filter.expression = \"block.header.slot == uint(1234)\"\n *\n * 2. Filter by slot range:\n * filter.expression = \"block.header.slot >= uint(1000) && block.header.slot <= uint(2000)\"\n *\n * 3. Filter by slot using parameter:\n * filter.expression = \"block.header.slot == params.slot\"\n * filter.params[\"slot\"].uint_value = 1234\n *\n * 4. Filter by block version:\n * filter.expression = \"block.header.version == uint(1)\"\n *\n * 5. Filter by producer (using parameter):\n * filter.expression = \"block.header.producer.value == params.producer\"\n * filter.params[\"producer\"].bytes_value = <32-byte producer pubkey>\n *\n * 6. Filter by max compute units:\n * filter.expression = \"block.header.max_compute_units > uint(1000000)\"\n * filter.expression = \"block.header.max_compute_units >= uint(0) && block.header.max_compute_units <= uint(10000000)\"\n *\n * 7. Filter by max state units:\n * filter.expression = \"block.header.max_state_units > uint(0)\"\n *\n * 8. Filter by price:\n * filter.expression = \"block.header.price >= uint(0)\"\n * filter.expression = \"block.header.price > uint(1000)\"\n *\n * 9. Filter by start_slot:\n * filter.expression = \"block.header.start_slot <= uint(5000)\"\n *\n * 10. Filter by expiry_after:\n * filter.expression = \"block.header.expiry_after > uint(0)\"\n *\n * 11. Filter by max_block_size:\n * filter.expression = \"block.header.max_block_size >= uint(1000000)\"\n *\n * 12. Filter by execution status:\n * filter.expression = \"block.footer.status == int(2)\" // EXECUTION_STATUS_EXECUTED\n *\n * 13. Filter by consumed compute units:\n * filter.expression = \"block.footer.consumed_compute_units > uint(0)\"\n * filter.expression = \"block.footer.consumed_compute_units >= uint(100) && block.footer.consumed_compute_units <= uint(1000000)\"\n *\n * 14. Filter by consumed state units:\n * filter.expression = \"block.footer.consumed_state_units >= uint(0)\"\n * filter.expression = \"block.footer.consumed_state_units > uint(10)\"\n *\n * 15. Check for footer signature existence:\n * filter.expression = \"has(block.footer.signature)\"\n *\n * 16. Check for footer existence:\n * filter.expression = \"has(block.footer)\"\n *\n * 17. Check for producer existence:\n * filter.expression = \"has(block.header.producer)\"\n *\n * 18. Check for block hash existence:\n * filter.expression = \"has(block.header.block_hash)\"\n *\n * 19. Check for header signature existence:\n * filter.expression = \"has(block.header.header_signature)\"\n *\n * 20. Check for expiry timestamp existence:\n * filter.expression = \"has(block.header.expiry_timestamp)\"\n *\n * 21. Check for block time existence:\n * filter.expression = \"has(block.header.block_time)\"\n *\n * 22. Combine multiple header conditions with AND:\n * filter.expression = \"block.header.slot >= uint(1000) && block.header.max_compute_units > uint(1000000)\"\n *\n * 23. Combine multiple footer conditions with AND:\n * filter.expression = \"block.footer.consumed_compute_units > uint(0) && block.footer.consumed_state_units > uint(0)\"\n *\n * 24. Combine header and footer conditions:\n * filter.expression = \"block.header.slot >= uint(1000) && block.footer.consumed_compute_units > uint(100000)\"\n *\n * 25. Combine multiple conditions with OR:\n * filter.expression = \"block.header.slot == uint(100) || block.header.slot == uint(200)\"\n * filter.expression = \"block.footer.consumed_compute_units > uint(1000000) || block.footer.consumed_state_units > uint(10000)\"\n *\n * 26. Complex combined filters:\n * filter.expression = \"(block.header.slot >= uint(1000) && block.header.slot <= uint(2000)) || block.footer.consumed_compute_units > uint(5000000)\"\n *\n * 27. Use inequality operators:\n * filter.expression = \"block.header.max_compute_units < uint(10000000)\"\n * filter.expression = \"block.header.max_compute_units <= uint(10000000)\"\n * filter.expression = \"block.header.price >= uint(100)\"\n * filter.expression = \"block.footer.consumed_compute_units != uint(0)\"\n *\n * 28. Combine has() with value checks:\n * filter.expression = \"has(block.header.producer) && block.header.producer.value == params.producer\"\n * filter.params[\"producer\"].bytes_value = <32-byte producer pubkey>\n *\n * 29. Filter by multiple resource limits:\n * filter.expression = \"block.header.max_compute_units > uint(1000000) && block.header.max_state_units > uint(1000) && block.header.max_block_size > uint(1000000)\"\n *\n * 30. Filter blocks with high resource consumption:\n * filter.expression = \"block.footer.consumed_compute_units > uint(block.header.max_compute_units / 2)\"\n *\n * Note: All filters are pushed down to SQL for optimal performance where possible.\n * When SQL pushdown is not possible, filters are evaluated in-memory on fetched results.\n *\n * @generated from message thru.services.v1.ListBlocksRequest\n */\nexport type ListBlocksRequest = Message<\"thru.services.v1.ListBlocksRequest\"> & {\n /**\n * CEL filter expression (OPTIONAL). See message documentation for examples.\n *\n * @generated from field: optional thru.common.v1.Filter filter = 1;\n */\n filter?: Filter;\n\n /**\n * @generated from field: optional thru.common.v1.PageRequest page = 2;\n */\n page?: PageRequest;\n\n /**\n * @generated from field: optional thru.core.v1.BlockView view = 3;\n */\n view?: BlockView;\n\n /**\n * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 4;\n */\n minConsensus?: ConsensusStatus;\n};\n\n/**\n * Describes the message thru.services.v1.ListBlocksRequest.\n * Use `create(ListBlocksRequestSchema)` to create a new message.\n */\nexport const ListBlocksRequestSchema: GenMessage<ListBlocksRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 10);\n\n/**\n * ListBlocksResponse returns a page of blocks.\n *\n * @generated from message thru.services.v1.ListBlocksResponse\n */\nexport type ListBlocksResponse = Message<\"thru.services.v1.ListBlocksResponse\"> & {\n /**\n * @generated from field: repeated thru.core.v1.Block blocks = 1;\n */\n blocks: Block[];\n\n /**\n * @generated from field: optional thru.common.v1.PageResponse page = 2;\n */\n page?: PageResponse;\n};\n\n/**\n * Describes the message thru.services.v1.ListBlocksResponse.\n * Use `create(ListBlocksResponseSchema)` to create a new message.\n */\nexport const ListBlocksResponseSchema: GenMessage<ListBlocksResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 11);\n\n/**\n * ListTransactionsForAccountRequest lists transactions involving a specific account.\n *\n * This RPC returns all transactions where the specified account appears in any\n * capacity (fee payer, signer, or affected account). Results can be filtered\n * using CEL expressions on transaction properties.\n *\n * ## Available Filter Fields\n *\n * - `transaction.slot` (uint64): Block slot number\n * - `transaction.block_offset` (uint32): Position within block\n * - `transaction.signature.value` (bytes): Transaction signature\n *\n * Header fields (in-memory evaluation only, not SQL pushdown):\n * - `transaction.header.version` (uint32): Transaction format version\n * - `transaction.header.fee` (uint64): Transaction fee\n * - `transaction.header.nonce` (uint64): Sender account nonce\n * - `transaction.header.start_slot` (uint64): Earliest slot for execution\n * - `transaction.header.expiry_after` (uint32): Expiry duration in slots\n * - `transaction.header.requested_compute_units` (uint64): Requested compute units\n * - `transaction.header.requested_memory_units` (uint32): Requested memory units\n * - `transaction.header.requested_state_units` (uint32): Requested state units\n * - `transaction.header.fee_payer_pubkey.value` (bytes): Fee payer public key\n * - `transaction.header.program_pubkey.value` (bytes): Program public key\n * - `transaction.header.fee_payer_signature.value` (bytes): Fee payer signature\n *\n * Execution result fields:\n * - `transaction.execution_result.vm_error` (TransactionVmError enum): VM execution status (0 = success)\n * - `transaction.execution_result.user_error_code` (uint64): User-defined error code\n * - `transaction.execution_result.execution_result` (uint64): Alias for user_error_code\n * - `transaction.execution_result.consumed_compute_units` (uint64): Compute units used\n * - `transaction.execution_result.consumed_memory_units` (uint32): Memory units used\n * - `transaction.execution_result.consumed_state_units` (uint32): State units used\n * - `transaction.execution_result.events_count` (uint32): Number of events emitted\n * - `transaction.execution_result.events_size` (uint32): Total size of event data in bytes\n *\n * ## Filter Examples\n *\n * ### Filter by slot\n * ```\n * filter {\n * expression: \"transaction.slot == params.slot\"\n * params {\n * key: \"slot\"\n * value { int_value: 12345 }\n * }\n * }\n * ```\n *\n * ### Filter by block offset\n * ```\n * filter {\n * expression: \"transaction.block_offset == uint(5)\"\n * }\n * ```\n *\n * ### Filter by compute units (high usage)\n * ```\n * filter {\n * expression: \"transaction.execution_result.consumed_compute_units >= uint(1000000)\"\n * }\n * ```\n *\n * ### Filter by memory units\n * ```\n * filter {\n * expression: \"transaction.execution_result.consumed_memory_units > uint(0)\"\n * }\n * ```\n *\n * ### Filter by state units\n * ```\n * filter {\n * expression: \"transaction.execution_result.consumed_state_units > uint(0)\"\n * }\n * ```\n *\n * ### Filter successful transactions (by error code)\n * ```\n * filter {\n * expression: \"transaction.execution_result.user_error_code == uint(0)\"\n * }\n * ```\n *\n * ### Filter by VM execution status\n * ```\n * filter {\n * expression: \"transaction.execution_result.vm_error == int(0)\"\n * }\n * ```\n *\n * ### Filter transactions with events\n * ```\n * filter {\n * expression: \"transaction.execution_result.events_count > uint(0)\"\n * }\n * ```\n *\n * ### Filter by event data size\n * ```\n * filter {\n * expression: \"transaction.execution_result.events_size > uint(0)\"\n * }\n * ```\n *\n * ### Check for optional fields using has()\n * ```\n * filter {\n * expression: \"has(transaction.execution_result)\"\n * }\n * ```\n *\n * ### Combined filters with AND/OR\n * ```\n * filter {\n * expression: \"transaction.execution_result.consumed_compute_units >= uint(1000000) && transaction.execution_result.user_error_code == uint(0)\"\n * }\n * ```\n *\n * ### Using params for dynamic values\n * ```\n * filter {\n * expression: \"transaction.execution_result.consumed_compute_units >= params.u64\"\n * params {\n * key: \"u64\"\n * value { int_value: 500000 }\n * }\n * }\n * ```\n *\n * ## Available Functions\n *\n * - `has(field)`: Check if optional field is present\n * - `uint(value)`: Convert to unsigned integer\n * - `int(value)`: Convert to signed integer\n * - `string(value)`: Convert to string type\n * - `bytes(value)`: Convert to bytes type\n *\n * ## Available Filter Parameters\n *\n * - `params.slot` (uint64): Slot number for filtering\n * - `params.u64` (uint64): Generic uint64 parameter\n * - `params.pubkey` (Pubkey): Public key parameter for filtering\n *\n * ## Performance Notes\n *\n * Filters on `transaction.slot`, `transaction.block_offset`, and\n * `transaction.execution_result.*` fields are optimized with SQL pushdown\n * for better performance. Complex expressions may fall back to in-memory evaluation.\n *\n * @generated from message thru.services.v1.ListTransactionsForAccountRequest\n */\nexport type ListTransactionsForAccountRequest = Message<\"thru.services.v1.ListTransactionsForAccountRequest\"> & {\n /**\n * @generated from field: thru.common.v1.Pubkey account = 1;\n */\n account?: Pubkey;\n\n /**\n * @generated from field: optional thru.common.v1.PageRequest page = 2;\n */\n page?: PageRequest;\n\n /**\n * Optional CEL filter applied after the account constraint.\n *\n * @generated from field: optional thru.common.v1.Filter filter = 3;\n */\n filter?: Filter;\n};\n\n/**\n * Describes the message thru.services.v1.ListTransactionsForAccountRequest.\n * Use `create(ListTransactionsForAccountRequestSchema)` to create a new message.\n */\nexport const ListTransactionsForAccountRequestSchema: GenMessage<ListTransactionsForAccountRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 12);\n\n/**\n * ListTransactionsForAccountResponse contains transaction data.\n *\n *\n * @generated from message thru.services.v1.ListTransactionsForAccountResponse\n */\nexport type ListTransactionsForAccountResponse = Message<\"thru.services.v1.ListTransactionsForAccountResponse\"> & {\n /**\n * @generated from field: optional thru.common.v1.PageResponse page = 1;\n */\n page?: PageResponse;\n\n /**\n * @generated from field: repeated thru.core.v1.Transaction transactions = 2;\n */\n transactions: Transaction[];\n};\n\n/**\n * Describes the message thru.services.v1.ListTransactionsForAccountResponse.\n * Use `create(ListTransactionsForAccountResponseSchema)` to create a new message.\n */\nexport const ListTransactionsForAccountResponseSchema: GenMessage<ListTransactionsForAccountResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 13);\n\n/**\n * GetVersionRequest fetches component version strings.\n *\n * @generated from message thru.services.v1.GetVersionRequest\n */\nexport type GetVersionRequest = Message<\"thru.services.v1.GetVersionRequest\"> & {\n};\n\n/**\n * Describes the message thru.services.v1.GetVersionRequest.\n * Use `create(GetVersionRequestSchema)` to create a new message.\n */\nexport const GetVersionRequestSchema: GenMessage<GetVersionRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 14);\n\n/**\n * GetVersionResponse returns version information per component.\n *\n * @generated from message thru.services.v1.GetVersionResponse\n */\nexport type GetVersionResponse = Message<\"thru.services.v1.GetVersionResponse\"> & {\n /**\n * @generated from field: map<string, string> versions = 1;\n */\n versions: { [key: string]: string };\n};\n\n/**\n * Describes the message thru.services.v1.GetVersionResponse.\n * Use `create(GetVersionResponseSchema)` to create a new message.\n */\nexport const GetVersionResponseSchema: GenMessage<GetVersionResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 15);\n\n/**\n * GetEventRequest fetches an event by identifier.\n *\n * @generated from message thru.services.v1.GetEventRequest\n */\nexport type GetEventRequest = Message<\"thru.services.v1.GetEventRequest\"> & {\n /**\n * @generated from field: string event_id = 1;\n */\n eventId: string;\n\n /**\n * @generated from field: optional thru.common.v1.VersionContext version_context = 2;\n */\n versionContext?: VersionContext;\n};\n\n/**\n * Describes the message thru.services.v1.GetEventRequest.\n * Use `create(GetEventRequestSchema)` to create a new message.\n */\nexport const GetEventRequestSchema: GenMessage<GetEventRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 16);\n\n/**\n * Event represents a transaction event emitted by the chain.\n *\n * @generated from message thru.services.v1.Event\n */\nexport type Event = Message<\"thru.services.v1.Event\"> & {\n /**\n * @generated from field: string event_id = 1;\n */\n eventId: string;\n\n /**\n * @generated from field: thru.common.v1.Signature transaction_signature = 2;\n */\n transactionSignature?: Signature;\n\n /**\n * @generated from field: optional thru.common.v1.Pubkey program = 3;\n */\n program?: Pubkey;\n\n /**\n * @generated from field: optional bytes payload = 4;\n */\n payload?: Uint8Array;\n\n /**\n * @generated from field: optional uint64 slot = 5;\n */\n slot?: bigint;\n\n /**\n * @generated from field: optional uint32 call_idx = 6;\n */\n callIdx?: number;\n\n /**\n * @generated from field: optional uint32 program_idx = 7;\n */\n programIdx?: number;\n\n /**\n * @generated from field: optional uint32 payload_size = 8;\n */\n payloadSize?: number;\n\n /**\n * @generated from field: optional uint32 block_offset = 9;\n */\n blockOffset?: number;\n\n /**\n * @generated from field: optional google.protobuf.Timestamp timestamp = 10;\n */\n timestamp?: Timestamp;\n\n /**\n * @generated from field: optional thru.common.v1.Pubkey fee_payer = 11;\n */\n feePayer?: Pubkey;\n};\n\n/**\n * Describes the message thru.services.v1.Event.\n * Use `create(EventSchema)` to create a new message.\n */\nexport const EventSchema: GenMessage<Event> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 17);\n\n/**\n * ListEventsRequest lists events with CEL filtering and pagination.\n *\n * Returns events ordered from most recent to older (slot DESC, block_offset DESC, call_idx DESC).\n * Supports filtering on event metadata and payload using CEL expressions with specialized byte functions.\n *\n * Available fields for filtering:\n * - event.event_id (string): Unique event identifier (format: \"ts{slot}_{block_offset}_{call_idx}\")\n * - event.transaction_signature.value (bytes): Transaction signature that emitted the event\n * - event.slot (uint64): Block slot number where event was emitted\n * - event.call_idx (uint32): Instruction call index within transaction\n * - event.block_offset (uint32): Transaction's position within the block\n * - event.timestamp (google.protobuf.Timestamp): Event emission timestamp\n * - event.program.value (bytes): Program public key that emitted the event\n * - event.program_idx (uint32): Program index within transaction\n * - event.payload (bytes): Event payload data\n * - event.payload_size (uint32): Size of event payload in bytes\n * - event.fee_payer.value (bytes): Fee payer's public key for the transaction\n *\n * Available CEL functions:\n * - has(field): Check if optional field exists\n * - startsWith(string, prefix): Check if string starts with prefix (string fields only)\n * - first1Byte(bytes): Extract first byte as uint8\n * - first4Bytes(bytes): Extract first 4 bytes as uint32 (little-endian)\n * - first8Bytes(bytes): Extract first 8 bytes as uint64 (little-endian)\n * - bytesPrefix(bytes, prefix): Check if bytes start with prefix\n * - uint(value): Convert to uint type\n * - int(value): Convert to int type\n * - string(value): Convert to string type\n * - bytes(value): Convert to bytes type\n * - double(value): Convert to double type\n * - timestamp(value): Convert to timestamp type\n * - duration(value): Convert to duration type\n *\n * Available filter parameters (accessible via params.* in expressions):\n * - params.slot (uint64): Slot number for filtering\n * - params.u64 (uint64): Generic uint64 parameter for payload matching\n * - params.signature (Signature): Transaction signature for filtering\n * - params.signature.value (bytes): Transaction signature bytes for filtering\n * - params.address (Pubkey): Program address for filtering\n * - params.address.value (bytes): Program address bytes for filtering\n * - params.prefix (bytes): Byte prefix for payload filtering\n * - params.timestamp (Timestamp): Timestamp parameter for filtering\n *\n * Filter examples:\n *\n * 1. Filter by slot:\n * filter.expression = \"event.slot > uint(1000)\"\n * filter.expression = \"event.slot >= uint(100) && event.slot <= uint(200)\"\n *\n * 2. Filter by slot using parameter:\n * filter.expression = \"event.slot >= params.slot\"\n * filter.params[\"slot\"].int_value = 1234\n *\n * 3. Filter by call index:\n * filter.expression = \"event.call_idx == uint(0)\" // First instruction\n * filter.expression = \"event.call_idx > uint(0)\" // Nested instructions\n *\n * 4. Filter by block offset:\n * filter.expression = \"event.block_offset >= uint(0)\"\n * filter.expression = \"event.block_offset == uint(5)\"\n *\n * 5. Filter by transaction signature (using parameter):\n * filter.expression = \"event.transaction_signature.value == params.signature\"\n * filter.params[\"signature\"].signature_value.value = <64-byte signature>\n *\n * 6. Filter by program address (using parameter):\n * filter.expression = \"has(event.program) && event.program.value == params.address\"\n * filter.params[\"address\"].pubkey_value.value = <32-byte program pubkey>\n *\n * 7. Filter by event ID prefix using startsWith:\n * filter.expression = \"event.event_id.startsWith(\\\"ts\\\")\"\n * filter.expression = \"event.event_id.startsWith(\\\"ts1000_\\\")\"\n *\n * 8. Check for payload existence:\n * filter.expression = \"has(event.payload)\"\n *\n * 9. Check for program existence:\n * filter.expression = \"has(event.program)\"\n *\n * 10. Filter by payload first byte (event type):\n * filter.expression = \"has(event.payload) && first1Byte(event.payload) == uint(1)\" // MESSAGE events\n * filter.expression = \"has(event.payload) && first1Byte(event.payload) == uint(2)\" // Other type\n *\n * 11. Filter by payload first 4 bytes (uint32 event type):\n * filter.expression = \"has(event.payload) && first4Bytes(event.payload) == uint(2)\" // COUNTER events\n * filter.expression = \"has(event.payload) && first4Bytes(event.payload) == params.u64\"\n * filter.params[\"u64\"].int_value = 2\n *\n * 12. Filter by payload first 8 bytes (uint64 event type):\n * filter.expression = \"has(event.payload) && first8Bytes(event.payload) == uint(6)\" // PATTERN events\n * filter.expression = \"has(event.payload) && first8Bytes(event.payload) == params.u64\"\n * filter.params[\"u64\"].int_value = 6\n *\n * 13. Filter by payload byte prefix:\n * filter.expression = \"bytesPrefix(event.payload, params.prefix)\"\n * filter.params[\"prefix\"].bytes_value = <byte prefix to match>\n *\n * 14. Combine slot and call_idx filters:\n * filter.expression = \"event.slot > uint(1000) && event.call_idx == uint(0)\"\n *\n * 15. Combine slot, call_idx, and payload existence:\n * filter.expression = \"event.slot > uint(1000) && event.call_idx == uint(0) && has(event.payload)\"\n *\n * 16. Filter by program and payload type:\n * filter.expression = \"has(event.program) && event.program.value == params.address && first1Byte(event.payload) == uint(1)\"\n * filter.params[\"address\"].pubkey_value.value = <32-byte program pubkey>\n *\n * 17. Filter MESSAGE events (type 1) with specific program:\n * filter.expression = \"has(event.payload) && first1Byte(event.payload) == uint(1) && event.program.value == params.address\"\n * filter.params[\"address\"].pubkey_value.value = <32-byte program pubkey>\n *\n * 18. Filter COUNTER events (type 2) in slot range:\n * filter.expression = \"has(event.payload) && first4Bytes(event.payload) == uint(2) && event.slot >= uint(100) && event.slot <= uint(200)\"\n *\n * 19. Filter PATTERN events (type 6) with payload prefix:\n * filter.expression = \"has(event.payload) && first8Bytes(event.payload) == uint(6) && bytesPrefix(event.payload, params.prefix)\"\n * filter.params[\"prefix\"].bytes_value = <pattern prefix bytes>\n *\n * 20. Complex combined filter:\n * filter.expression = \"(event.slot > uint(1000) && event.call_idx == uint(0)) || first1Byte(event.payload) == uint(1)\"\n *\n * 21. Filter events from specific transaction:\n * filter.expression = \"event.transaction_signature.value == params.signature && has(event.payload)\"\n * filter.params[\"signature\"].signature_value.value = <64-byte signature>\n *\n * 22. Filter by multiple payload type options:\n * filter.expression = \"has(event.payload) && (first1Byte(event.payload) == uint(1) || first1Byte(event.payload) == uint(2))\"\n *\n * 23. Filter nested instruction events:\n * filter.expression = \"event.call_idx > uint(0) && has(event.program)\"\n *\n * 24. Filter first instruction events only:\n * filter.expression = \"event.call_idx == uint(0)\"\n *\n * 25. Filter events with payload longer than specific size (using bytesPrefix with empty prefix):\n * filter.expression = \"has(event.payload)\"\n *\n * 26. Combine has() checks:\n * filter.expression = \"has(event.program) && has(event.payload) && has(event.timestamp)\"\n *\n * 27. Use inequality operators:\n * filter.expression = \"event.slot < uint(10000)\"\n * filter.expression = \"event.slot <= uint(10000)\"\n * filter.expression = \"event.call_idx >= uint(0)\"\n * filter.expression = \"event.block_offset != uint(0)\"\n *\n * 28. Filter by timestamp (if available):\n * filter.expression = \"has(event.timestamp)\"\n *\n * 29. Match specific event ID pattern:\n * filter.expression = \"event.event_id.startsWith(\\\"ts1234_0_\\\")\"\n *\n * 30. Complex payload and metadata filter:\n * filter.expression = \"event.slot >= params.slot && has(event.payload) && first8Bytes(event.payload) == params.u64 && event.program.value == params.address\"\n * filter.params[\"slot\"].int_value = 1000\n * filter.params[\"u64\"].int_value = 6\n * filter.params[\"address\"].pubkey_value.value = <32-byte program pubkey>\n *\n * Note: Filters on slot, call_idx, block_offset, transaction_signature, and program are pushed down to SQL\n * for optimal performance. Payload filters (first1Byte, first4Bytes, first8Bytes, bytesPrefix) are evaluated\n * in-memory on fetched results.\n *\n * @generated from message thru.services.v1.ListEventsRequest\n */\nexport type ListEventsRequest = Message<\"thru.services.v1.ListEventsRequest\"> & {\n /**\n * CEL filter expression (OPTIONAL). See message documentation for examples.\n *\n * @generated from field: optional thru.common.v1.Filter filter = 1;\n */\n filter?: Filter;\n\n /**\n * @generated from field: optional thru.common.v1.PageRequest page = 2;\n */\n page?: PageRequest;\n\n /**\n * @generated from field: optional thru.common.v1.VersionContext version_context = 3;\n */\n versionContext?: VersionContext;\n\n /**\n * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 4;\n */\n minConsensus?: ConsensusStatus;\n};\n\n/**\n * Describes the message thru.services.v1.ListEventsRequest.\n * Use `create(ListEventsRequestSchema)` to create a new message.\n */\nexport const ListEventsRequestSchema: GenMessage<ListEventsRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 18);\n\n/**\n * ListEventsResponse returns paginated events.\n *\n * @generated from message thru.services.v1.ListEventsResponse\n */\nexport type ListEventsResponse = Message<\"thru.services.v1.ListEventsResponse\"> & {\n /**\n * @generated from field: repeated thru.services.v1.Event events = 1;\n */\n events: Event[];\n\n /**\n * @generated from field: optional thru.common.v1.PageResponse page = 2;\n */\n page?: PageResponse;\n};\n\n/**\n * Describes the message thru.services.v1.ListEventsResponse.\n * Use `create(ListEventsResponseSchema)` to create a new message.\n */\nexport const ListEventsResponseSchema: GenMessage<ListEventsResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 19);\n\n/**\n * ListTransactionsRequest lists executed transactions with CEL filtering and pagination.\n *\n * Returns transactions ordered from most recent to older (slot DESC, block_offset DESC).\n * Supports filtering on transaction metadata and execution results using CEL expressions.\n *\n * Available fields for filtering:\n * - transaction.slot (uint64): Block slot number where transaction was executed\n * - transaction.block_offset (uint32): Transaction's position within the block\n * - transaction.signature.value (bytes): Transaction signature\n *\n * Header fields (in-memory evaluation only, not SQL pushdown):\n * - transaction.header.version (uint32): Transaction format version\n * - transaction.header.fee (uint64): Transaction fee\n * - transaction.header.nonce (uint64): Sender account nonce\n * - transaction.header.start_slot (uint64): Earliest slot for execution\n * - transaction.header.expiry_after (uint32): Expiry duration in slots\n * - transaction.header.requested_compute_units (uint64): Requested compute units\n * - transaction.header.requested_memory_units (uint32): Requested memory units\n * - transaction.header.requested_state_units (uint32): Requested state units\n * - transaction.header.fee_payer_pubkey.value (bytes): Fee payer public key\n * - transaction.header.program_pubkey.value (bytes): Program public key\n * - transaction.header.fee_payer_signature.value (bytes): Fee payer signature\n *\n * Execution result fields:\n * - transaction.execution_result.vm_error (TransactionVmError enum): VM error code (0 = success)\n * - transaction.execution_result.user_error_code (uint64): User-defined error code\n * - transaction.execution_result.execution_result (uint64): Alias for user_error_code\n * - transaction.execution_result.consumed_compute_units (uint64): Compute units consumed\n * - transaction.execution_result.consumed_memory_units (uint32): Memory units consumed\n * - transaction.execution_result.consumed_state_units (uint32): State units consumed\n * - transaction.execution_result.events_count (uint32): Number of events emitted\n * - transaction.execution_result.events_size (uint32): Total size of events in bytes\n *\n * Available CEL functions:\n * - has(field): Check if optional field exists\n * - uint(value): Convert to uint type\n * - int(value): Convert to int type\n * - string(value): Convert to string type\n * - bytes(value): Convert to bytes type\n *\n * Available filter parameters (accessible via params.* in expressions):\n * - params.slot (uint64): Slot number for filtering\n * - params.u64 (uint64): Generic uint64 parameter\n * - params.pubkey (Pubkey): Public key parameter for filtering\n *\n * Filter examples:\n *\n * 1. Filter by slot range:\n * filter.expression = \"transaction.slot >= uint(1000) && transaction.slot <= uint(2000)\"\n *\n * 2. Filter by successful transactions (no error):\n * filter.expression = \"transaction.execution_result.user_error_code == uint(0)\"\n * filter.expression = \"transaction.execution_result.vm_error == int(0)\"\n *\n * 3. Filter by specific VM error:\n * filter.expression = \"transaction.execution_result.vm_error == int(2)\" // VM_REVERT\n * filter.expression = \"transaction.execution_result.vm_error == int(4)\" // NONCE_TOO_LOW\n * filter.expression = \"transaction.execution_result.vm_error == int(5)\" // NONCE_TOO_HIGH\n *\n * 4. Filter by resource usage:\n * filter.expression = \"transaction.execution_result.consumed_compute_units > uint(1000)\"\n * filter.expression = \"transaction.execution_result.consumed_memory_units > uint(0)\"\n * filter.expression = \"transaction.execution_result.consumed_state_units >= uint(0)\"\n *\n * 5. Filter by compute units range:\n * filter.expression = \"transaction.execution_result.consumed_compute_units >= uint(0) && transaction.execution_result.consumed_compute_units < uint(1000000)\"\n *\n * 6. Filter by events count:\n * filter.expression = \"transaction.execution_result.events_count == uint(0)\" // No events (transfers)\n * filter.expression = \"transaction.execution_result.events_count > uint(0)\" // Has events\n * filter.expression = \"transaction.execution_result.events_count == uint(1)\" // Exactly 1 event\n *\n * 7. Filter by events size:\n * filter.expression = \"transaction.execution_result.events_size == uint(0)\" // No events\n * filter.expression = \"transaction.execution_result.events_size > uint(0)\" // Has events\n * filter.expression = \"transaction.execution_result.events_size >= uint(100)\" // Large events\n * filter.expression = \"transaction.execution_result.events_size >= uint(50) && transaction.execution_result.events_size <= uint(200)\"\n *\n * 8. Filter by block offset:\n * filter.expression = \"transaction.block_offset >= uint(0)\"\n * filter.expression = \"transaction.block_offset == uint(5)\"\n *\n * 9. Combine multiple conditions with AND:\n * filter.expression = \"transaction.execution_result.user_error_code == uint(0) && transaction.execution_result.consumed_compute_units > uint(0)\"\n *\n * 10. Combine multiple conditions with OR:\n * filter.expression = \"transaction.execution_result.user_error_code == uint(0) || transaction.execution_result.user_error_code != uint(0)\"\n * filter.expression = \"transaction.execution_result.vm_error == int(2) || transaction.execution_result.vm_error == int(4)\"\n *\n * 11. Complex combined filters:\n * filter.expression = \"(transaction.slot >= uint(0) && transaction.execution_result.user_error_code == uint(0)) || transaction.execution_result.consumed_compute_units > uint(100000)\"\n *\n * 12. Check for field existence:\n * filter.expression = \"has(transaction.execution_result)\"\n *\n * 13. Use inequality operators:\n * filter.expression = \"transaction.execution_result.consumed_compute_units < uint(1000000)\"\n * filter.expression = \"transaction.execution_result.consumed_compute_units <= uint(1000000)\"\n * filter.expression = \"transaction.execution_result.consumed_compute_units >= uint(0)\"\n * filter.expression = \"transaction.execution_result.user_error_code != uint(999)\"\n *\n * 14. Use params.slot parameter:\n * filter.expression = \"transaction.slot == params.slot\"\n * filter.params[\"slot\"].uint_value = 1234\n *\n * 15. Use params.u64 with type conversion:\n * filter.expression = \"transaction.execution_result.consumed_compute_units < uint(params.u64)\"\n * filter.params[\"u64\"].uint_value = 1000000\n *\n * The return_events flag controls whether event data is included in the response:\n * - return_events = false (default): Only event counts/sizes are returned, not actual event data\n * - return_events = true: Full event data is included in execution results\n *\n * Note: All filters are pushed down to SQL for optimal performance where possible.\n *\n * @generated from message thru.services.v1.ListTransactionsRequest\n */\nexport type ListTransactionsRequest = Message<\"thru.services.v1.ListTransactionsRequest\"> & {\n /**\n * CEL filter expression (OPTIONAL). See message documentation for examples.\n *\n * @generated from field: optional thru.common.v1.Filter filter = 1;\n */\n filter?: Filter;\n\n /**\n * @generated from field: optional thru.common.v1.PageRequest page = 2;\n */\n page?: PageRequest;\n\n /**\n * Whether to include event data in results (default: false)\n *\n * @generated from field: optional bool return_events = 3;\n */\n returnEvents?: boolean;\n\n /**\n * @generated from field: optional thru.common.v1.VersionContext version_context = 4;\n */\n versionContext?: VersionContext;\n\n /**\n * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 5;\n */\n minConsensus?: ConsensusStatus;\n};\n\n/**\n * Describes the message thru.services.v1.ListTransactionsRequest.\n * Use `create(ListTransactionsRequestSchema)` to create a new message.\n */\nexport const ListTransactionsRequestSchema: GenMessage<ListTransactionsRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 20);\n\n/**\n * ListTransactionsResponse returns paginated executed transactions.\n *\n * @generated from message thru.services.v1.ListTransactionsResponse\n */\nexport type ListTransactionsResponse = Message<\"thru.services.v1.ListTransactionsResponse\"> & {\n /**\n * @generated from field: repeated thru.core.v1.Transaction transactions = 1;\n */\n transactions: Transaction[];\n\n /**\n * @generated from field: optional thru.common.v1.PageResponse page = 2;\n */\n page?: PageResponse;\n};\n\n/**\n * Describes the message thru.services.v1.ListTransactionsResponse.\n * Use `create(ListTransactionsResponseSchema)` to create a new message.\n */\nexport const ListTransactionsResponseSchema: GenMessage<ListTransactionsResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 21);\n\n/**\n * GetTransactionStatusRequest fetches execution status for a transaction.\n *\n * @generated from message thru.services.v1.GetTransactionStatusRequest\n */\nexport type GetTransactionStatusRequest = Message<\"thru.services.v1.GetTransactionStatusRequest\"> & {\n /**\n * @generated from field: thru.common.v1.Signature signature = 1;\n */\n signature?: Signature;\n};\n\n/**\n * Describes the message thru.services.v1.GetTransactionStatusRequest.\n * Use `create(GetTransactionStatusRequestSchema)` to create a new message.\n */\nexport const GetTransactionStatusRequestSchema: GenMessage<GetTransactionStatusRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 22);\n\n/**\n * TransactionStatus captures status metadata for a transaction.\n *\n * @generated from message thru.services.v1.TransactionStatus\n */\nexport type TransactionStatus = Message<\"thru.services.v1.TransactionStatus\"> & {\n /**\n * @generated from field: thru.common.v1.Signature signature = 1;\n */\n signature?: Signature;\n\n /**\n * @generated from field: optional thru.common.v1.ConsensusStatus consensus_status = 2;\n */\n consensusStatus?: ConsensusStatus;\n\n /**\n * @generated from field: optional thru.core.v1.TransactionExecutionResult execution_result = 3;\n */\n executionResult?: TransactionExecutionResult;\n};\n\n/**\n * Describes the message thru.services.v1.TransactionStatus.\n * Use `create(TransactionStatusSchema)` to create a new message.\n */\nexport const TransactionStatusSchema: GenMessage<TransactionStatus> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 23);\n\n/**\n * @generated from message thru.services.v1.GetHeightRequest\n */\nexport type GetHeightRequest = Message<\"thru.services.v1.GetHeightRequest\"> & {\n};\n\n/**\n * Describes the message thru.services.v1.GetHeightRequest.\n * Use `create(GetHeightRequestSchema)` to create a new message.\n */\nexport const GetHeightRequestSchema: GenMessage<GetHeightRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 24);\n\n/**\n * GetHeightResponse\n *\n * @generated from message thru.services.v1.GetHeightResponse\n */\nexport type GetHeightResponse = Message<\"thru.services.v1.GetHeightResponse\"> & {\n /**\n * @generated from field: uint64 finalized = 1;\n */\n finalized: bigint;\n\n /**\n * @generated from field: uint64 locally_executed = 2;\n */\n locallyExecuted: bigint;\n\n /**\n * @generated from field: uint64 cluster_executed = 3;\n */\n clusterExecuted: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.GetHeightResponse.\n * Use `create(GetHeightResponseSchema)` to create a new message.\n */\nexport const GetHeightResponseSchema: GenMessage<GetHeightResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 25);\n\n/**\n * GetStateRootsRequest retrieves up to 257 state roots ending at a specified slot.\n * Used for transaction replay to verify state proofs against historical roots.\n * Returns state roots in ascending slot order, from (slot - 256) to slot (inclusive).\n *\n * @generated from message thru.services.v1.GetStateRootsRequest\n */\nexport type GetStateRootsRequest = Message<\"thru.services.v1.GetStateRootsRequest\"> & {\n /**\n * The slot to retrieve state roots up to (inclusive).\n * Returns up to 257 state roots ending at this slot.\n * If not specified, returns state roots ending at the latest available slot.\n *\n * @generated from field: optional uint64 slot = 1;\n */\n slot?: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.GetStateRootsRequest.\n * Use `create(GetStateRootsRequestSchema)` to create a new message.\n */\nexport const GetStateRootsRequestSchema: GenMessage<GetStateRootsRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 26);\n\n/**\n * StateRootEntry represents a state root for a specific slot.\n *\n * @generated from message thru.services.v1.StateRootEntry\n */\nexport type StateRootEntry = Message<\"thru.services.v1.StateRootEntry\"> & {\n /**\n * @generated from field: uint64 slot = 1;\n */\n slot: bigint;\n\n /**\n * @generated from field: bytes state_root = 2;\n */\n stateRoot: Uint8Array;\n};\n\n/**\n * Describes the message thru.services.v1.StateRootEntry.\n * Use `create(StateRootEntrySchema)` to create a new message.\n */\nexport const StateRootEntrySchema: GenMessage<StateRootEntry> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 27);\n\n/**\n * GetStateRootsResponse contains up to 257 state roots ending at the requested slot.\n *\n * @generated from message thru.services.v1.GetStateRootsResponse\n */\nexport type GetStateRootsResponse = Message<\"thru.services.v1.GetStateRootsResponse\"> & {\n /**\n * @generated from field: repeated thru.services.v1.StateRootEntry state_roots = 1;\n */\n stateRoots: StateRootEntry[];\n};\n\n/**\n * Describes the message thru.services.v1.GetStateRootsResponse.\n * Use `create(GetStateRootsResponseSchema)` to create a new message.\n */\nexport const GetStateRootsResponseSchema: GenMessage<GetStateRootsResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_query_service, 28);\n\n/**\n * QueryService defines unary RPCs for accessing blockchain data.\n *\n * @generated from service thru.services.v1.QueryService\n */\nexport const QueryService: GenService<{\n /**\n * Get block heights\n *\n * @generated from rpc thru.services.v1.QueryService.GetHeight\n */\n getHeight: {\n methodKind: \"unary\";\n input: typeof GetHeightRequestSchema;\n output: typeof GetHeightResponseSchema;\n },\n /**\n * Get account information.\n *\n * @generated from rpc thru.services.v1.QueryService.GetAccount\n */\n getAccount: {\n methodKind: \"unary\";\n input: typeof GetAccountRequestSchema;\n output: typeof AccountSchema;\n },\n /**\n * Get account raw bytes.\n *\n * @generated from rpc thru.services.v1.QueryService.GetRawAccount\n */\n getRawAccount: {\n methodKind: \"unary\";\n input: typeof GetRawAccountRequestSchema;\n output: typeof RawAccountSchema;\n },\n /**\n * Get transaction by signature.\n *\n * @generated from rpc thru.services.v1.QueryService.GetTransaction\n */\n getTransaction: {\n methodKind: \"unary\";\n input: typeof GetTransactionRequestSchema;\n output: typeof TransactionSchema;\n },\n /**\n * Get raw transaction by signature.\n *\n * @generated from rpc thru.services.v1.QueryService.GetRawTransaction\n */\n getRawTransaction: {\n methodKind: \"unary\";\n input: typeof GetRawTransactionRequestSchema;\n output: typeof RawTransactionSchema;\n },\n /**\n * Get block by slot or hash.\n *\n * @generated from rpc thru.services.v1.QueryService.GetBlock\n */\n getBlock: {\n methodKind: \"unary\";\n input: typeof GetBlockRequestSchema;\n output: typeof BlockSchema;\n },\n /**\n * Get raw block bytes.\n *\n * @generated from rpc thru.services.v1.QueryService.GetRawBlock\n */\n getRawBlock: {\n methodKind: \"unary\";\n input: typeof GetRawBlockRequestSchema;\n output: typeof RawBlockSchema;\n },\n /**\n * List accounts using CEL-based filtering.\n *\n * @generated from rpc thru.services.v1.QueryService.ListAccounts\n */\n listAccounts: {\n methodKind: \"unary\";\n input: typeof ListAccountsRequestSchema;\n output: typeof ListAccountsResponseSchema;\n },\n /**\n * List blocks using pagination and filtering. By default returns blocks ordered from latest slot to the first one.\n *\n * @generated from rpc thru.services.v1.QueryService.ListBlocks\n */\n listBlocks: {\n methodKind: \"unary\";\n input: typeof ListBlocksRequestSchema;\n output: typeof ListBlocksResponseSchema;\n },\n /**\n * List executed transaction signatures involving an account.\n *\n * @generated from rpc thru.services.v1.QueryService.ListTransactionsForAccount\n */\n listTransactionsForAccount: {\n methodKind: \"unary\";\n input: typeof ListTransactionsForAccountRequestSchema;\n output: typeof ListTransactionsForAccountResponseSchema;\n },\n /**\n * Get a specific event by ID.\n *\n * @generated from rpc thru.services.v1.QueryService.GetEvent\n */\n getEvent: {\n methodKind: \"unary\";\n input: typeof GetEventRequestSchema;\n output: typeof EventSchema;\n },\n /**\n * List events with CEL filtering and pagination. Returns events ordered from most recent to older.\n *\n * @generated from rpc thru.services.v1.QueryService.ListEvents\n */\n listEvents: {\n methodKind: \"unary\";\n input: typeof ListEventsRequestSchema;\n output: typeof ListEventsResponseSchema;\n },\n /**\n * List executed transactions with CEL filtering and pagination. Returns transactions ordered from most recent to older.\n *\n * @generated from rpc thru.services.v1.QueryService.ListTransactions\n */\n listTransactions: {\n methodKind: \"unary\";\n input: typeof ListTransactionsRequestSchema;\n output: typeof ListTransactionsResponseSchema;\n },\n /**\n * Get derived transaction status metadata.\n *\n * @generated from rpc thru.services.v1.QueryService.GetTransactionStatus\n */\n getTransactionStatus: {\n methodKind: \"unary\";\n input: typeof GetTransactionStatusRequestSchema;\n output: typeof TransactionStatusSchema;\n },\n /**\n * Generate an account state proof snapshot.\n *\n * @generated from rpc thru.services.v1.QueryService.GenerateStateProof\n */\n generateStateProof: {\n methodKind: \"unary\";\n input: typeof GenerateStateProofRequestSchema;\n output: typeof GenerateStateProofResponseSchema;\n },\n /**\n * Get component version strings.\n *\n * @generated from rpc thru.services.v1.QueryService.GetVersion\n */\n getVersion: {\n methodKind: \"unary\";\n input: typeof GetVersionRequestSchema;\n output: typeof GetVersionResponseSchema;\n },\n /**\n * Get state roots for a range of slots.\n * Used for transaction replay to verify state proofs against historical roots.\n *\n * @generated from rpc thru.services.v1.QueryService.GetStateRoots\n */\n getStateRoots: {\n methodKind: \"unary\";\n input: typeof GetStateRootsRequestSchema;\n output: typeof GetStateRootsResponseSchema;\n },\n}> = /*@__PURE__*/\n serviceDesc(file_thru_services_v1_query_service, 0);\n\n","// @generated by protoc-gen-es v2.10.1 with parameter \"target=ts\"\n// @generated from file thru/services/v1/streaming_service.proto (package thru.services.v1, syntax proto3)\n/* eslint-disable */\n\nimport type { GenFile, GenMessage, GenService } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc, serviceDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../../google/api/field_behavior_pb\";\nimport type { Pubkey, Signature } from \"../../common/v1/primitives_pb\";\nimport { file_thru_common_v1_primitives } from \"../../common/v1/primitives_pb\";\nimport type { Duration, Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_duration, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { ConsensusStatus } from \"../../common/v1/consensus_pb\";\nimport { file_thru_common_v1_consensus } from \"../../common/v1/consensus_pb\";\nimport type { Filter } from \"../../common/v1/filters_pb\";\nimport { file_thru_common_v1_filters } from \"../../common/v1/filters_pb\";\nimport type { Account, AccountMeta, AccountPage, AccountView } from \"../../core/v1/account_pb\";\nimport { file_thru_core_v1_account } from \"../../core/v1/account_pb\";\nimport type { Block, BlockView } from \"../../core/v1/block_pb\";\nimport { file_thru_core_v1_block } from \"../../core/v1/block_pb\";\nimport type { Transaction, TransactionExecutionResult } from \"../../core/v1/transaction_pb\";\nimport { file_thru_core_v1_transaction } from \"../../core/v1/transaction_pb\";\nimport { file_thru_core_v1_types } from \"../../core/v1/types_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file thru/services/v1/streaming_service.proto.\n */\nexport const file_thru_services_v1_streaming_service: GenFile = /*@__PURE__*/\n fileDesc(\"Cih0aHJ1L3NlcnZpY2VzL3YxL3N0cmVhbWluZ19zZXJ2aWNlLnByb3RvEhB0aHJ1LnNlcnZpY2VzLnYxIo0CChNTdHJlYW1CbG9ja3NSZXF1ZXN0EhwKCnN0YXJ0X3Nsb3QYASABKARCA+BBAUgAiAEBEjAKBmZpbHRlchgCIAEoCzIWLnRocnUuY29tbW9uLnYxLkZpbHRlckID4EEBSAGIAQESLwoEdmlldxgDIAEoDjIXLnRocnUuY29yZS52MS5CbG9ja1ZpZXdCA+BBAUgCiAEBEkAKDW1pbl9jb25zZW5zdXMYBCABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgDiAEBQg0KC19zdGFydF9zbG90QgkKB19maWx0ZXJCBwoFX3ZpZXdCEAoOX21pbl9jb25zZW5zdXMiPwoUU3RyZWFtQmxvY2tzUmVzcG9uc2USJwoFYmxvY2sYASABKAsyEy50aHJ1LmNvcmUudjEuQmxvY2tCA+BBAiKcAQobU3RyZWFtQWNjb3VudFVwZGF0ZXNSZXF1ZXN0EjEKBHZpZXcYAiABKA4yGS50aHJ1LmNvcmUudjEuQWNjb3VudFZpZXdCA+BBAUgAiAEBEjAKBmZpbHRlchgEIAEoCzIWLnRocnUuY29tbW9uLnYxLkZpbHRlckID4EEBSAGIAQFCBwoFX3ZpZXdCCQoHX2ZpbHRlckoECAEQAiLtAQoNQWNjb3VudFVwZGF0ZRIRCgRzbG90GAEgASgEQgPgQQISMQoEcGFnZRgCIAEoCzIZLnRocnUuY29yZS52MS5BY2NvdW50UGFnZUID4EEBSACIAQESMQoEbWV0YRgDIAEoCzIZLnRocnUuY29yZS52MS5BY2NvdW50TWV0YUID4EEBSAGIAQESGAoGZGVsZXRlGAQgASgIQgPgQQFIAogBARIsCgdhZGRyZXNzGAUgASgLMhYudGhydS5jb21tb24udjEuUHVia2V5QgPgQQJCBwoFX3BhZ2VCBwoFX21ldGFCCQoHX2RlbGV0ZSIiCg1CbG9ja0ZpbmlzaGVkEhEKBHNsb3QYASABKARCA+BBAiK8AQocU3RyZWFtQWNjb3VudFVwZGF0ZXNSZXNwb25zZRIpCghzbmFwc2hvdBgBIAEoCzIVLnRocnUuY29yZS52MS5BY2NvdW50SAASMQoGdXBkYXRlGAIgASgLMh8udGhydS5zZXJ2aWNlcy52MS5BY2NvdW50VXBkYXRlSAASMwoIZmluaXNoZWQYAyABKAsyHy50aHJ1LnNlcnZpY2VzLnYxLkJsb2NrRmluaXNoZWRIAEIJCgdtZXNzYWdlIqwBChlTdHJlYW1UcmFuc2FjdGlvbnNSZXF1ZXN0EjAKBmZpbHRlchgBIAEoCzIWLnRocnUuY29tbW9uLnYxLkZpbHRlckID4EEBSACIAQESQAoNbWluX2NvbnNlbnN1cxgCIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSAGIAQFCCQoHX2ZpbHRlckIQCg5fbWluX2NvbnNlbnN1cyJRChpTdHJlYW1UcmFuc2FjdGlvbnNSZXNwb25zZRIzCgt0cmFuc2FjdGlvbhgBIAEoCzIZLnRocnUuY29yZS52MS5UcmFuc2FjdGlvbkID4EECIlIKE1N0cmVhbUV2ZW50c1JlcXVlc3QSMAoGZmlsdGVyGAEgASgLMhYudGhydS5jb21tb24udjEuRmlsdGVyQgPgQQFIAIgBAUIJCgdfZmlsdGVyIqYCChRTdHJlYW1FdmVudHNSZXNwb25zZRIVCghldmVudF9pZBgBIAEoCUID4EECEhkKB3BheWxvYWQYAiABKAxCA+BBAUgAiAEBEjcKCXRpbWVzdGFtcBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAUgBiAEBEiwKB3Byb2dyYW0YBCABKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBAhIVCghjYWxsX2lkeBgFIAEoDUID4EECEjEKCXNpZ25hdHVyZRgGIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEhEKBHNsb3QYByABKARCA+BBAkIKCghfcGF5bG9hZEIMCgpfdGltZXN0YW1wIo4BChdUcmFja1RyYW5zYWN0aW9uUmVxdWVzdBIxCglzaWduYXR1cmUYASABKAsyGS50aHJ1LmNvbW1vbi52MS5TaWduYXR1cmVCA+BBAhI0Cgd0aW1lb3V0GAIgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQgPgQQFIAIgBAUIKCghfdGltZW91dCLWAQoYVHJhY2tUcmFuc2FjdGlvblJlc3BvbnNlEjEKCXNpZ25hdHVyZRgBIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEj4KEGNvbnNlbnN1c19zdGF0dXMYAiABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBARJHChBleGVjdXRpb25fcmVzdWx0GAMgASgLMigudGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uRXhlY3V0aW9uUmVzdWx0QgPgQQEiFQoTU3RyZWFtSGVpZ2h0UmVxdWVzdCJsChRTdHJlYW1IZWlnaHRSZXNwb25zZRIWCglmaW5hbGl6ZWQYASABKARCA+BBAhIdChBsb2NhbGx5X2V4ZWN1dGVkGAIgASgEQgPgQQISHQoQY2x1c3Rlcl9leGVjdXRlZBgDIAEoBEID4EECMo4FChBTdHJlYW1pbmdTZXJ2aWNlEl8KDFN0cmVhbUJsb2NrcxIlLnRocnUuc2VydmljZXMudjEuU3RyZWFtQmxvY2tzUmVxdWVzdBomLnRocnUuc2VydmljZXMudjEuU3RyZWFtQmxvY2tzUmVzcG9uc2UwARJ3ChRTdHJlYW1BY2NvdW50VXBkYXRlcxItLnRocnUuc2VydmljZXMudjEuU3RyZWFtQWNjb3VudFVwZGF0ZXNSZXF1ZXN0Gi4udGhydS5zZXJ2aWNlcy52MS5TdHJlYW1BY2NvdW50VXBkYXRlc1Jlc3BvbnNlMAEScQoSU3RyZWFtVHJhbnNhY3Rpb25zEisudGhydS5zZXJ2aWNlcy52MS5TdHJlYW1UcmFuc2FjdGlvbnNSZXF1ZXN0GiwudGhydS5zZXJ2aWNlcy52MS5TdHJlYW1UcmFuc2FjdGlvbnNSZXNwb25zZTABEl8KDFN0cmVhbUV2ZW50cxIlLnRocnUuc2VydmljZXMudjEuU3RyZWFtRXZlbnRzUmVxdWVzdBomLnRocnUuc2VydmljZXMudjEuU3RyZWFtRXZlbnRzUmVzcG9uc2UwARJrChBUcmFja1RyYW5zYWN0aW9uEikudGhydS5zZXJ2aWNlcy52MS5UcmFja1RyYW5zYWN0aW9uUmVxdWVzdBoqLnRocnUuc2VydmljZXMudjEuVHJhY2tUcmFuc2FjdGlvblJlc3BvbnNlMAESXwoMU3RyZWFtSGVpZ2h0EiUudGhydS5zZXJ2aWNlcy52MS5TdHJlYW1IZWlnaHRSZXF1ZXN0GiYudGhydS5zZXJ2aWNlcy52MS5TdHJlYW1IZWlnaHRSZXNwb25zZTABQuABChRjb20udGhydS5zZXJ2aWNlcy52MUIVU3RyZWFtaW5nU2VydmljZVByb3RvUAFaSGdpdGh1Yi5jb20vVW50by1MYWJzL3RocnUtbmV0L2dycGMvcGtnL3Byb3RvL3RocnUvc2VydmljZXMvdjE7c2VydmljZXN2MaICA1RTWKoCEFRocnUuU2VydmljZXMuVjG6AgRUSFVTygIQVGhydVxTZXJ2aWNlc1xWMeICHFRocnVcU2VydmljZXNcVjFcR1BCTWV0YWRhdGHqAhJUaHJ1OjpTZXJ2aWNlczo6VjFiBnByb3RvMw\", [file_buf_validate_validate, file_google_api_field_behavior, file_thru_common_v1_primitives, file_google_protobuf_duration, file_google_protobuf_timestamp, file_thru_common_v1_consensus, file_thru_common_v1_filters, file_thru_core_v1_account, file_thru_core_v1_block, file_thru_core_v1_transaction, file_thru_core_v1_types]);\n\n/**\n * StreamBlocksRequest subscribes to real-time block updates.\n *\n * Filter expressions support the following params:\n *\n * - params.slot (int64): Slot number for comparison\n * Example: block.block.header.slot == params.slot\n *\n * - params.min_slot (int64): Minimum slot for range filtering\n * Example: block.block.header.slot >= params.min_slot\n *\n * - params.start_slot (int64): Starting slot for filtering\n * Example: block.block.header.slot >= params.start_slot\n *\n * - params.u64 (int64): Generic 64-bit value for numeric comparisons\n * Examples:\n * block.block.header.max_compute_units > params.u64\n * block.block.header.bond_amount_lock_up >= params.u64\n *\n * - params.producer (bytes|Pubkey): Producer pubkey for filtering\n * Examples:\n * block.block.header.producer.value == params.producer\n * has(block.block.header.producer) && block.block.header.producer.value == params.producer\n *\n * Available block header fields:\n * block.block.header.slot, block.block.header.version,\n * block.block.header.start_slot, block.block.header.expiry_after,\n * block.block.header.max_block_size, block.block.header.max_compute_units,\n * block.block.header.max_state_units, block.block.header.bond_amount_lock_up,\n * block.block.header.producer, block.block.header.producer.value\n *\n * Available block footer fields:\n * block.block.footer.status, block.block.footer.consumed_compute_units,\n * block.block.footer.consumed_state_units, block.block.footer.attestor_payment\n *\n * Available consensus status field:\n * block.block.consensus_status\n *\n * Filter expression examples:\n *\n * 1. Filter by specific slot:\n * Expression: \"block.block.header.slot == params.slot\"\n * Params: {\"slot\": 12345}\n *\n * 2. Filter by slot range:\n * Expression: \"block.block.header.slot >= params.min_slot\"\n * Params: {\"min_slot\": 1000}\n *\n * 3. Filter by block version:\n * Expression: \"block.block.header.version >= uint(0)\"\n *\n * 4. Filter by specific producer:\n * Expression: \"has(block.block.header.producer) && block.block.header.producer.value == params.producer\"\n * Params: {\"producer\": <32-byte pubkey>}\n *\n * 5. Filter by max compute units:\n * Expression: \"block.block.header.max_compute_units > uint(0)\"\n *\n * 6. Filter by max state units:\n * Expression: \"block.block.header.max_state_units > uint(0)\"\n *\n * 7. Filter by bond amount lock-up:\n * Expression: \"block.block.header.bond_amount_lock_up >= uint(0)\"\n *\n * 8. Filter by footer status:\n * Expression: \"has(block.block.footer) && block.block.footer.status == int(1)\"\n * Note: EXECUTION_STATUS_PENDING = 1, EXECUTION_STATUS_EXECUTED = 2\n *\n * 9. Filter by consumed compute units:\n * Expression: \"has(block.block.footer) && block.block.footer.consumed_compute_units > uint(0)\"\n *\n * 10. Filter by consumed state units:\n * Expression: \"has(block.block.footer) && block.block.footer.consumed_state_units > uint(0)\"\n *\n * 11. Filter by consensus status:\n * Expression: \"block.block.consensus_status == int(2)\"\n * Note: CONSENSUS_STATUS_UNSPECIFIED = 0, CONSENSUS_STATUS_OBSERVED = 1,\n * CONSENSUS_STATUS_INCLUDED = 2\n *\n * 12. Check for optional fields presence:\n * Expression: \"has(block.block.header) && has(block.block.footer)\"\n *\n * 13. Combined filters (multiple conditions):\n * Expression: \"block.block.header.slot >= params.min_slot && has(block.block.footer) && block.block.footer.consumed_compute_units > uint(0)\"\n * Params: {\"min_slot\": 1000}\n *\n * 14. Numeric comparison with params:\n * Expression: \"block.block.header.max_compute_units > params.u64\"\n * Params: {\"u64\": 1000000}\n *\n * @generated from message thru.services.v1.StreamBlocksRequest\n */\nexport type StreamBlocksRequest = Message<\"thru.services.v1.StreamBlocksRequest\"> & {\n /**\n * @generated from field: optional uint64 start_slot = 1;\n */\n startSlot?: bigint;\n\n /**\n * @generated from field: optional thru.common.v1.Filter filter = 2;\n */\n filter?: Filter;\n\n /**\n * @generated from field: optional thru.core.v1.BlockView view = 3;\n */\n view?: BlockView;\n\n /**\n * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 4;\n */\n minConsensus?: ConsensusStatus;\n};\n\n/**\n * Describes the message thru.services.v1.StreamBlocksRequest.\n * Use `create(StreamBlocksRequestSchema)` to create a new message.\n */\nexport const StreamBlocksRequestSchema: GenMessage<StreamBlocksRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_streaming_service, 0);\n\n/**\n * StreamBlocksResponse delivers block updates.\n *\n * @generated from message thru.services.v1.StreamBlocksResponse\n */\nexport type StreamBlocksResponse = Message<\"thru.services.v1.StreamBlocksResponse\"> & {\n /**\n * @generated from field: thru.core.v1.Block block = 1;\n */\n block?: Block;\n};\n\n/**\n * Describes the message thru.services.v1.StreamBlocksResponse.\n * Use `create(StreamBlocksResponseSchema)` to create a new message.\n */\nexport const StreamBlocksResponseSchema: GenMessage<StreamBlocksResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_streaming_service, 1);\n\n/**\n * StreamAccountUpdatesRequest subscribes to account delta events.\n *\n * Filter expressions support the following params:\n *\n * - params.min_slot (uint64): Minimum slot for filtering updates\n * Example: account_update.slot >= params.min_slot\n *\n * - params.min_balance (uint64): Minimum balance for filtering\n * Example: snapshot.meta.balance >= params.min_balance\n *\n * - params.owner (bytes|Pubkey): Owner pubkey for filtering\n * Examples:\n * snapshot.meta.owner.value == params.owner\n * account_update.meta.owner.value == params.owner\n *\n * - params.address (bytes|Pubkey): Account address for filtering\n * Example: account_address.value == params.address\n * Note: Use account_address for unified filtering across both snapshot and update messages\n *\n * - params.addresses (BytesList): List of addresses for multi-account filtering\n * Example: account_address.value in params.addresses\n * Note: Use the 'in' operator to filter by multiple addresses in a single subscription\n *\n * - params.min_nonce (uint64): Minimum nonce for filtering\n * Example: snapshot.meta.nonce >= params.min_nonce\n *\n * - params.min_seq (uint64): Minimum sequence number for filtering\n * Example: snapshot.meta.seq >= params.min_seq\n *\n * - params.min_data_size (uint32): Minimum data size for filtering\n * Example: snapshot.meta.data_size >= params.min_data_size\n *\n * Available snapshot fields (thru.core.v1.Account):\n * snapshot.address, snapshot.address.value (bytes),\n * snapshot.meta.balance (uint64), snapshot.meta.seq (uint64),\n * snapshot.meta.nonce (uint64), snapshot.meta.data_size (uint32),\n * snapshot.meta.version (uint32), snapshot.meta.flags (AccountFlags),\n * snapshot.meta.flags.is_program (bool), snapshot.meta.flags.is_privileged (bool),\n * snapshot.meta.flags.is_uncompressable (bool), snapshot.meta.flags.is_ephemeral (bool),\n * snapshot.meta.flags.is_deleted (bool), snapshot.meta.flags.is_new (bool),\n * snapshot.meta.flags.is_compressed (bool),\n * snapshot.meta.owner, snapshot.meta.owner.value (bytes)\n *\n * Available account_update fields (AccountUpdate):\n * account_update.slot (uint64), account_update.delete (bool),\n * account_update.meta.balance (uint64), account_update.meta.seq (uint64),\n * account_update.meta.nonce (uint64), account_update.meta.data_size (uint32),\n * account_update.meta.version (uint32), account_update.meta.flags (AccountFlags),\n * account_update.meta.flags.is_program (bool), account_update.meta.flags.is_privileged (bool),\n * account_update.meta.flags.is_uncompressable (bool), account_update.meta.flags.is_ephemeral (bool),\n * account_update.meta.flags.is_deleted (bool), account_update.meta.flags.is_new (bool),\n * account_update.meta.flags.is_compressed (bool),\n * account_update.meta.owner, account_update.meta.owner.value (bytes)\n *\n * Available unified fields (work for both snapshot and update messages):\n * account_address, account_address.value (bytes) - extracted from whichever message type is present\n *\n * Filter expression examples:\n *\n * 1. Filter by minimum balance (snapshot or update):\n * Expression: \"(has(snapshot.meta) && snapshot.meta.balance >= uint(1000000)) || (has(account_update.meta) && account_update.meta.balance >= uint(1000000))\"\n *\n * 2. Filter by account owner using params:\n * Expression: \"(has(snapshot.meta) && has(snapshot.meta.owner) && snapshot.meta.owner.value == params.owner) || (has(account_update.meta) && has(account_update.meta.owner) && account_update.meta.owner.value == params.owner)\"\n * Params: {\"owner\": <32-byte pubkey>}\n *\n * 3. Filter by specific account address (works for both snapshot and update messages):\n * Expression: \"account_address.value == params.address\"\n * Params: {\"address\": <32-byte pubkey>}\n *\n * 4. Filter by minimum slot for updates:\n * Expression: \"has(account_update.meta) && account_update.slot >= params.min_slot\"\n * Params: {\"min_slot\": 1000}\n *\n * 5. Filter by nonce greater than value:\n * Expression: \"(has(snapshot.meta) && snapshot.meta.nonce >= uint(5)) || (has(account_update.meta) && account_update.meta.nonce >= uint(5))\"\n *\n * 6. Filter by sequence number:\n * Expression: \"(has(snapshot.meta) && snapshot.meta.seq >= uint(100)) || (has(account_update.meta) && account_update.meta.seq >= uint(100))\"\n *\n * 7. Filter by data size:\n * Expression: \"(has(snapshot.meta) && snapshot.meta.data_size >= uint(1024)) || (has(account_update.meta) && account_update.meta.data_size >= uint(1024))\"\n *\n * 8. Filter by account version:\n * Expression: \"(has(snapshot.meta) && snapshot.meta.version >= uint(1)) || (has(account_update.meta) && account_update.meta.version >= uint(1))\"\n *\n * 9. Filter by account flags (check if account is a program):\n * Expression: \"(has(snapshot.meta) && has(snapshot.meta.flags) && snapshot.meta.flags.is_program) || (has(account_update.meta) && has(account_update.meta.flags) && account_update.meta.flags.is_program)\"\n *\n * 10. Filter by privileged flag:\n * Expression: \"(has(snapshot.meta) && has(snapshot.meta.flags) && snapshot.meta.flags.is_privileged) || (has(account_update.meta) && has(account_update.meta.flags) && account_update.meta.flags.is_privileged)\"\n *\n * 11. Filter non-delete updates:\n * Expression: \"has(snapshot.meta) || (has(account_update.meta) && (!has(account_update.delete) || !account_update.delete))\"\n *\n * 12. Check for snapshot or update presence:\n * Expression: \"has(snapshot.meta) || has(account_update.meta)\"\n *\n * 13. Combined filters (multiple conditions):\n * Expression: \"has(snapshot.meta) || (has(account_update.meta) && account_update.slot >= params.min_slot && account_update.meta.balance >= params.min_balance)\"\n * Params: {\"min_slot\": 1000, \"min_balance\": 1000000}\n *\n * 14. Filter by minimum balance using params:\n * Expression: \"(has(snapshot.meta) && snapshot.meta.balance >= params.min_balance) || (has(account_update.meta) && account_update.meta.balance >= params.min_balance)\"\n * Params: {\"min_balance\": 5000000000}\n *\n * Note: The response contains either a snapshot (initial state), an update (delta),\n * or a BlockFinished message. Filters should handle both snapshot and update cases\n * using OR logic to match either message type.\n *\n * To filter by specific account address (recommended - works for both message types):\n * Expression: \"account_address.value == params.address\"\n * Params: {\"address\": <32-byte pubkey>}\n *\n * To filter by owner (program):\n * Expression: \"(has(snapshot.meta.owner) && snapshot.meta.owner.value == params.owner) || (has(account_update.meta.owner) && account_update.meta.owner.value == params.owner)\"\n * Params: {\"owner\": <32-byte program pubkey>}\n *\n * To filter by multiple account addresses (recommended for multi-account subscriptions):\n * Expression: \"account_address.value in params.addresses\"\n * Params: {\"addresses\": BytesList{values: [<pubkey1>, <pubkey2>, ...]}}\n * Note: Use BytesList parameter type with the 'in' operator for efficient multi-address filtering\n *\n * @generated from message thru.services.v1.StreamAccountUpdatesRequest\n */\nexport type StreamAccountUpdatesRequest = Message<\"thru.services.v1.StreamAccountUpdatesRequest\"> & {\n /**\n * @generated from field: optional thru.core.v1.AccountView view = 2;\n */\n view?: AccountView;\n\n /**\n * @generated from field: optional thru.common.v1.Filter filter = 4;\n */\n filter?: Filter;\n};\n\n/**\n * Describes the message thru.services.v1.StreamAccountUpdatesRequest.\n * Use `create(StreamAccountUpdatesRequestSchema)` to create a new message.\n */\nexport const StreamAccountUpdatesRequestSchema: GenMessage<StreamAccountUpdatesRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_streaming_service, 2);\n\n/**\n * AccountUpdate describes a delta for an account.\n *\n * @generated from message thru.services.v1.AccountUpdate\n */\nexport type AccountUpdate = Message<\"thru.services.v1.AccountUpdate\"> & {\n /**\n * @generated from field: uint64 slot = 1;\n */\n slot: bigint;\n\n /**\n * @generated from field: optional thru.core.v1.AccountPage page = 2;\n */\n page?: AccountPage;\n\n /**\n * @generated from field: optional thru.core.v1.AccountMeta meta = 3;\n */\n meta?: AccountMeta;\n\n /**\n * @generated from field: optional bool delete = 4;\n */\n delete?: boolean;\n\n /**\n * Account address for identifying the account in multi-account streams.\n *\n * @generated from field: thru.common.v1.Pubkey address = 5;\n */\n address?: Pubkey;\n};\n\n/**\n * Describes the message thru.services.v1.AccountUpdate.\n * Use `create(AccountUpdateSchema)` to create a new message.\n */\nexport const AccountUpdateSchema: GenMessage<AccountUpdate> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_streaming_service, 3);\n\n/**\n * BlockFinished is sent when block's execution is complete.\n *\n * @generated from message thru.services.v1.BlockFinished\n */\nexport type BlockFinished = Message<\"thru.services.v1.BlockFinished\"> & {\n /**\n * @generated from field: uint64 slot = 1;\n */\n slot: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.BlockFinished.\n * Use `create(BlockFinishedSchema)` to create a new message.\n */\nexport const BlockFinishedSchema: GenMessage<BlockFinished> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_streaming_service, 4);\n\n/**\n * StreamAccountUpdatesResponse contains either an initial snapshot or a delta.\n *\n * @generated from message thru.services.v1.StreamAccountUpdatesResponse\n */\nexport type StreamAccountUpdatesResponse = Message<\"thru.services.v1.StreamAccountUpdatesResponse\"> & {\n /**\n * @generated from oneof thru.services.v1.StreamAccountUpdatesResponse.message\n */\n message: {\n /**\n * @generated from field: thru.core.v1.Account snapshot = 1;\n */\n value: Account;\n case: \"snapshot\";\n } | {\n /**\n * @generated from field: thru.services.v1.AccountUpdate update = 2;\n */\n value: AccountUpdate;\n case: \"update\";\n } | {\n /**\n * @generated from field: thru.services.v1.BlockFinished finished = 3;\n */\n value: BlockFinished;\n case: \"finished\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * Describes the message thru.services.v1.StreamAccountUpdatesResponse.\n * Use `create(StreamAccountUpdatesResponseSchema)` to create a new message.\n */\nexport const StreamAccountUpdatesResponseSchema: GenMessage<StreamAccountUpdatesResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_streaming_service, 5);\n\n/**\n * StreamTransactionsRequest subscribes to transaction confirmations.\n *\n * Filter expressions support the following params:\n *\n * - params.min_slot (uint64): Minimum slot for filtering transactions\n * Example: transaction.slot >= params.min_slot\n *\n * - params.max_slot (uint64): Maximum slot for filtering transactions\n * Example: transaction.slot <= params.max_slot\n *\n * - params.slot (uint64): Specific slot for exact match filtering\n * Example: transaction.slot == params.slot\n *\n * - params.min_fee (uint64): Minimum fee for filtering transactions\n * Example: transaction.header.fee >= params.min_fee\n *\n * - params.fee_payer (bytes|Pubkey): Fee payer pubkey for filtering\n * Example: transaction.header.fee_payer_pubkey.value == params.fee_payer\n *\n * - params.signature (bytes|Signature): Transaction signature for filtering\n * Example: transaction.signature.value == params.signature\n *\n * Available transaction fields (thru.core.v1.Transaction):\n * transaction.signature, transaction.signature.value (bytes),\n * transaction.slot (uint64), transaction.block_offset (uint32),\n * transaction.header, transaction.header.version (uint32),\n * transaction.header.fee (uint64),\n * transaction.header.fee_payer_pubkey, transaction.header.fee_payer_pubkey.value (bytes),\n * transaction.execution_result, transaction.execution_result.user_error_code (uint32),\n * transaction.execution_result.vm_error (int32)\n *\n * Available consensus_status field:\n * consensus_status (int32) - Current consensus status of the transaction\n * Values: CONSENSUS_STATUS_UNSPECIFIED = 0, CONSENSUS_STATUS_OBSERVED = 1,\n * CONSENSUS_STATUS_INCLUDED = 2\n *\n * Filter expression examples:\n *\n * 1. Filter by minimum slot:\n * Expression: \"has(transaction.slot) && transaction.slot >= params.min_slot\"\n * Params: {\"min_slot\": 1000}\n *\n * 2. Filter by slot range:\n * Expression: \"has(transaction.slot) && transaction.slot >= params.min_slot && transaction.slot <= params.max_slot\"\n * Params: {\"min_slot\": 1000, \"max_slot\": 2000}\n *\n * 3. Filter by specific slot:\n * Expression: \"has(transaction.slot) && transaction.slot == params.slot\"\n * Params: {\"slot\": 12345}\n *\n * 4. Filter by minimum fee:\n * Expression: \"has(transaction.header) && transaction.header.fee >= params.min_fee\"\n * Params: {\"min_fee\": 5000}\n *\n * 5. Filter by fee payer:\n * Expression: \"has(transaction.header.fee_payer_pubkey) && transaction.header.fee_payer_pubkey.value == params.fee_payer\"\n * Params: {\"fee_payer\": <32-byte pubkey>}\n *\n * 6. Filter by transaction signature:\n * Expression: \"has(transaction.signature) && transaction.signature.value == params.signature\"\n * Params: {\"signature\": <64-byte signature>}\n *\n * 7. Filter by header version:\n * Expression: \"has(transaction.header) && transaction.header.version >= uint(0)\"\n *\n * 8. Filter by successful execution:\n * Expression: \"has(transaction.execution_result) && transaction.execution_result.vm_error == int(0)\"\n *\n * 9. Filter by user error code:\n * Expression: \"has(transaction.execution_result) && transaction.execution_result.user_error_code == uint(0)\"\n *\n * 10. Filter by consensus status:\n * Expression: \"consensus_status >= int(2)\"\n * Note: Use >= int(2) for CONSENSUS_STATUS_INCLUDED and above\n *\n * 11. Check for execution result presence:\n * Expression: \"has(transaction.execution_result)\"\n *\n * 12. Filter by transaction with header and slot:\n * Expression: \"has(transaction.slot) && transaction.slot >= uint(0) && has(transaction.header)\"\n *\n * 13. Combined filters (slot, fee, and status):\n * Expression: \"has(transaction.slot) && transaction.slot >= params.min_slot && has(transaction.header) && transaction.header.fee >= params.min_fee && consensus_status >= int(2)\"\n * Params: {\"min_slot\": 1000, \"min_fee\": 5000}\n *\n * 14. Filter successful transactions with minimum fee:\n * Expression: \"has(transaction.execution_result) && transaction.execution_result.vm_error == int(0) && has(transaction.header) && transaction.header.fee >= params.min_fee\"\n * Params: {\"min_fee\": 10000}\n *\n * Note: The min_consensus field in the request provides built-in consensus filtering\n * without requiring a CEL expression. Use it in combination with filter expressions\n * for more complex filtering logic.\n *\n * @generated from message thru.services.v1.StreamTransactionsRequest\n */\nexport type StreamTransactionsRequest = Message<\"thru.services.v1.StreamTransactionsRequest\"> & {\n /**\n * @generated from field: optional thru.common.v1.Filter filter = 1;\n */\n filter?: Filter;\n\n /**\n * @generated from field: optional thru.common.v1.ConsensusStatus min_consensus = 2;\n */\n minConsensus?: ConsensusStatus;\n};\n\n/**\n * Describes the message thru.services.v1.StreamTransactionsRequest.\n * Use `create(StreamTransactionsRequestSchema)` to create a new message.\n */\nexport const StreamTransactionsRequestSchema: GenMessage<StreamTransactionsRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_streaming_service, 6);\n\n/**\n * StreamTransactionsResponse delivers transaction events.\n *\n * @generated from message thru.services.v1.StreamTransactionsResponse\n */\nexport type StreamTransactionsResponse = Message<\"thru.services.v1.StreamTransactionsResponse\"> & {\n /**\n * @generated from field: thru.core.v1.Transaction transaction = 1;\n */\n transaction?: Transaction;\n};\n\n/**\n * Describes the message thru.services.v1.StreamTransactionsResponse.\n * Use `create(StreamTransactionsResponseSchema)` to create a new message.\n */\nexport const StreamTransactionsResponseSchema: GenMessage<StreamTransactionsResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_streaming_service, 7);\n\n/**\n * StreamEventsRequest subscribes to chain events.\n *\n * Filter expressions support the following params:\n *\n * - params.prefix (bytes): Byte prefix for payload filtering\n * Example: bytesPrefix(event.payload, params.prefix)\n *\n * - params.slot (int64): Slot number for comparison\n * Example: event.slot >= params.slot\n *\n * - params.u64 (int64): Generic 64-bit value for payload extraction\n * Examples:\n * first8Bytes(event.payload) == params.u64\n * first4Bytes(event.payload) == params.u64\n * first1Byte(event.payload) == params.u64\n *\n * - params.signature (bytes|Signature|TsSignature): Signature for comparison\n * Examples:\n * event.signature.value == params.signature // bytes type\n * bytesPrefix(event.signature.value, params.signature)\n * Note: Signature and TsSignature types are auto-converted to bytes\n *\n * - params.address (bytes|Pubkey|TaPubkey): Address/pubkey for comparison\n * Examples:\n * event.program.value == params.address // bytes type\n * bytesPrefix(event.program.value, params.address)\n * Note: Pubkey and TaPubkey types are auto-converted to bytes\n *\n * - params.timestamp (int64): Timestamp in seconds for comparison\n * Example: int(event.timestamp) > params.timestamp\n *\n * Available event fields:\n * event.event_id (string), event.slot (uint64), event.payload (bytes),\n * event.call_idx (uint32), event.signature (Signature),\n * event.signature.value (bytes), event.program (Pubkey),\n * event.program.value (bytes), event.timestamp (Timestamp)\n *\n * Note: Unlike ListEventsRequest in QueryService, StreamEventsRequest does NOT support:\n * event.block_offset, event.program_idx, event.payload_size, event.transaction_signature\n *\n * Available filter functions:\n * - has(field): Check if optional field exists\n * Example: has(event.program) && has(event.signature)\n *\n * - startsWith(string, prefix): Check if string starts with prefix\n * Example: event.event_id.startsWith(\"ts\")\n *\n * - bytesPrefix(bytes, prefix): Check if bytes start with prefix\n * Examples:\n * bytesPrefix(event.payload, b\"\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")\n * bytesPrefix(event.payload, params.prefix)\n * bytesPrefix(event.program.value, params.address)\n * bytesPrefix(event.signature.value, params.signature)\n *\n * - first1Byte(bytes): Extract first byte as uint\n * Example: first1Byte(event.payload) == uint(1)\n *\n * - first4Bytes(bytes): Extract first 4 bytes as little-endian uint32\n * Example: first4Bytes(event.payload) == uint(2)\n *\n * - first8Bytes(bytes): Extract first 8 bytes as little-endian uint64\n * Example: first8Bytes(event.payload) == uint(6)\n *\n * - uint(value): Convert value to uint for comparison\n * - int(value): Convert value to int (used for timestamps)\n *\n * Filter expression examples:\n *\n * 1. Filter by payload type using first1Byte (MESSAGE event type = 1):\n * Expression: \"first1Byte(event.payload) == uint(1)\"\n *\n * 2. Filter by payload type using first4Bytes (COUNTER event type = 2):\n * Expression: \"first4Bytes(event.payload) == uint(2)\"\n *\n * 3. Filter by payload type using first8Bytes (PATTERN event type = 6):\n * Expression: \"first8Bytes(event.payload) == uint(6)\"\n *\n * 4. Filter by payload prefix with params:\n * Expression: \"bytesPrefix(event.payload, params.prefix)\"\n * Params: {\"prefix\": <bytes, e.g., 0x01000000...>}\n *\n * 5. Filter by slot using params:\n * Expression: \"event.slot >= params.slot\"\n * Params: {\"slot\": 1000}\n *\n * 6. Filter by program address (exact match):\n * Expression: \"event.program.value == params.address\"\n * Params: {\"address\": <32-byte pubkey as bytes, Pubkey, or TaPubkey>}\n *\n * 7. Filter by program address (prefix match):\n * Expression: \"bytesPrefix(event.program.value, params.address)\"\n * Params: {\"address\": <pubkey prefix bytes>}\n *\n * 8. Filter by transaction signature (exact match):\n * Expression: \"event.signature.value == params.signature\"\n * Params: {\"signature\": <64-byte signature as bytes, Signature, or TsSignature>}\n *\n * 9. Filter by transaction signature (prefix match):\n * Expression: \"bytesPrefix(event.signature.value, params.signature)\"\n * Params: {\"signature\": <signature prefix bytes>}\n *\n * 10. Filter by call_idx (0 = main program, 1+ = CPI calls):\n * Expression: \"event.call_idx == uint(0)\"\n * Expression: \"event.call_idx == uint(1)\"\n *\n * 11. Filter by event_id prefix:\n * Expression: \"event.event_id.startsWith(\\\"ts\\\")\"\n *\n * 12. Filter by timestamp (events in last hour):\n * Expression: \"has(event.timestamp) && int(event.timestamp) > int(1700000000)\"\n *\n * 13. Filter by timestamp using params:\n * Expression: \"has(event.timestamp) && int(event.timestamp) > params.timestamp\"\n * Params: {\"timestamp\": 1700000000}\n *\n * 14. Check field existence:\n * Expression: \"has(event.program) && has(event.signature)\"\n *\n * 15. Filter using params.u64 with first8Bytes:\n * Expression: \"first8Bytes(event.payload) == params.u64\"\n * Params: {\"u64\": 6}\n *\n * 16. Filter using params.u64 with first4Bytes:\n * Expression: \"first4Bytes(event.payload) == params.u64\"\n * Params: {\"u64\": 2}\n *\n * 17. Filter using params.u64 with first1Byte:\n * Expression: \"first1Byte(event.payload) == params.u64\"\n * Params: {\"u64\": 1}\n *\n * 18. Combined filter (slot + payload type + call_idx):\n * Expression: \"event.slot > uint(1000) && first1Byte(event.payload) == uint(1) && event.call_idx == uint(0)\"\n *\n * 19. Combined filter (call_idx + program address):\n * Expression: \"event.call_idx == uint(1) && event.program.value == params.address\"\n * Params: {\"address\": <32-byte CPI target program pubkey>}\n *\n * 20. Timestamp range filter:\n * Expression: \"has(event.timestamp) && int(event.timestamp) > int(1700000000) && int(event.timestamp) < int(1700100000)\"\n *\n * @generated from message thru.services.v1.StreamEventsRequest\n */\nexport type StreamEventsRequest = Message<\"thru.services.v1.StreamEventsRequest\"> & {\n /**\n * @generated from field: optional thru.common.v1.Filter filter = 1;\n */\n filter?: Filter;\n};\n\n/**\n * Describes the message thru.services.v1.StreamEventsRequest.\n * Use `create(StreamEventsRequestSchema)` to create a new message.\n */\nexport const StreamEventsRequestSchema: GenMessage<StreamEventsRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_streaming_service, 8);\n\n/**\n * StreamEventsResponse delivers event payloads.\n *\n * @generated from message thru.services.v1.StreamEventsResponse\n */\nexport type StreamEventsResponse = Message<\"thru.services.v1.StreamEventsResponse\"> & {\n /**\n * @generated from field: string event_id = 1;\n */\n eventId: string;\n\n /**\n * @generated from field: optional bytes payload = 2;\n */\n payload?: Uint8Array;\n\n /**\n * @generated from field: optional google.protobuf.Timestamp timestamp = 3;\n */\n timestamp?: Timestamp;\n\n /**\n * @generated from field: thru.common.v1.Pubkey program = 4;\n */\n program?: Pubkey;\n\n /**\n * @generated from field: uint32 call_idx = 5;\n */\n callIdx: number;\n\n /**\n * @generated from field: thru.common.v1.Signature signature = 6;\n */\n signature?: Signature;\n\n /**\n * @generated from field: uint64 slot = 7;\n */\n slot: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.StreamEventsResponse.\n * Use `create(StreamEventsResponseSchema)` to create a new message.\n */\nexport const StreamEventsResponseSchema: GenMessage<StreamEventsResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_streaming_service, 9);\n\n/**\n * TrackTransactionRequest subscribes to status updates for a transaction.\n *\n * @generated from message thru.services.v1.TrackTransactionRequest\n */\nexport type TrackTransactionRequest = Message<\"thru.services.v1.TrackTransactionRequest\"> & {\n /**\n * @generated from field: thru.common.v1.Signature signature = 1;\n */\n signature?: Signature;\n\n /**\n * @generated from field: optional google.protobuf.Duration timeout = 2;\n */\n timeout?: Duration;\n};\n\n/**\n * Describes the message thru.services.v1.TrackTransactionRequest.\n * Use `create(TrackTransactionRequestSchema)` to create a new message.\n */\nexport const TrackTransactionRequestSchema: GenMessage<TrackTransactionRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_streaming_service, 10);\n\n/**\n * TrackTransactionResponse reports status transitions for a transaction.\n *\n * @generated from message thru.services.v1.TrackTransactionResponse\n */\nexport type TrackTransactionResponse = Message<\"thru.services.v1.TrackTransactionResponse\"> & {\n /**\n * @generated from field: thru.common.v1.Signature signature = 1;\n */\n signature?: Signature;\n\n /**\n * @generated from field: thru.common.v1.ConsensusStatus consensus_status = 2;\n */\n consensusStatus: ConsensusStatus;\n\n /**\n * @generated from field: thru.core.v1.TransactionExecutionResult execution_result = 3;\n */\n executionResult?: TransactionExecutionResult;\n};\n\n/**\n * Describes the message thru.services.v1.TrackTransactionResponse.\n * Use `create(TrackTransactionResponseSchema)` to create a new message.\n */\nexport const TrackTransactionResponseSchema: GenMessage<TrackTransactionResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_streaming_service, 11);\n\n/**\n * StreamHeightRequest subscribes to real-time height updates.\n *\n * @generated from message thru.services.v1.StreamHeightRequest\n */\nexport type StreamHeightRequest = Message<\"thru.services.v1.StreamHeightRequest\"> & {\n};\n\n/**\n * Describes the message thru.services.v1.StreamHeightRequest.\n * Use `create(StreamHeightRequestSchema)` to create a new message.\n */\nexport const StreamHeightRequestSchema: GenMessage<StreamHeightRequest> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_streaming_service, 12);\n\n/**\n * StreamHeightResponse delivers height update events.\n *\n * @generated from message thru.services.v1.StreamHeightResponse\n */\nexport type StreamHeightResponse = Message<\"thru.services.v1.StreamHeightResponse\"> & {\n /**\n * @generated from field: uint64 finalized = 1;\n */\n finalized: bigint;\n\n /**\n * @generated from field: uint64 locally_executed = 2;\n */\n locallyExecuted: bigint;\n\n /**\n * @generated from field: uint64 cluster_executed = 3;\n */\n clusterExecuted: bigint;\n};\n\n/**\n * Describes the message thru.services.v1.StreamHeightResponse.\n * Use `create(StreamHeightResponseSchema)` to create a new message.\n */\nexport const StreamHeightResponseSchema: GenMessage<StreamHeightResponse> = /*@__PURE__*/\n messageDesc(file_thru_services_v1_streaming_service, 13);\n\n/**\n * StreamingService serves server-streaming gRPC APIs for real-time data.\n *\n * @generated from service thru.services.v1.StreamingService\n */\nexport const StreamingService: GenService<{\n /**\n * @generated from rpc thru.services.v1.StreamingService.StreamBlocks\n */\n streamBlocks: {\n methodKind: \"server_streaming\";\n input: typeof StreamBlocksRequestSchema;\n output: typeof StreamBlocksResponseSchema;\n },\n /**\n * @generated from rpc thru.services.v1.StreamingService.StreamAccountUpdates\n */\n streamAccountUpdates: {\n methodKind: \"server_streaming\";\n input: typeof StreamAccountUpdatesRequestSchema;\n output: typeof StreamAccountUpdatesResponseSchema;\n },\n /**\n * @generated from rpc thru.services.v1.StreamingService.StreamTransactions\n */\n streamTransactions: {\n methodKind: \"server_streaming\";\n input: typeof StreamTransactionsRequestSchema;\n output: typeof StreamTransactionsResponseSchema;\n },\n /**\n * @generated from rpc thru.services.v1.StreamingService.StreamEvents\n */\n streamEvents: {\n methodKind: \"server_streaming\";\n input: typeof StreamEventsRequestSchema;\n output: typeof StreamEventsResponseSchema;\n },\n /**\n * @generated from rpc thru.services.v1.StreamingService.TrackTransaction\n */\n trackTransaction: {\n methodKind: \"server_streaming\";\n input: typeof TrackTransactionRequestSchema;\n output: typeof TrackTransactionResponseSchema;\n },\n /**\n * @generated from rpc thru.services.v1.StreamingService.StreamHeight\n */\n streamHeight: {\n methodKind: \"server_streaming\";\n input: typeof StreamHeightRequestSchema;\n output: typeof StreamHeightResponseSchema;\n },\n}> = /*@__PURE__*/\n serviceDesc(file_thru_services_v1_streaming_service, 0);\n\n"]}